Herramientas Informaticas

Autor: juliocesar20200413 Página 23 de 139

Desarrollador web apasionado y gusto por la buena musica

CAMBIOS EN FACTURACIÓN CFDI 4.0 RESUMEN E INFORMACIÓN TÉCNICA

Conoce los cambios que tendrá la factura electrónica a partir del 1 de enero de 2022 existiendo un periodo de convivencia entre la versión 3.3 y la versión 4.0 que comprende del 1 de enero al 30 de abril de 2022.: 

  • Existirá la versión 4.0.
  • Incluirá de manera obligatoria el nombre y domicilio fiscal del emisor y del receptor.
  • Incluirá campos para identificar las operaciones donde exista una exportación de mercancías.
  • Identificará si las operaciones que ampara el comprobante son objeto de impuestos indirectos.
  • Incorporará nuevos apartados para reportar información respecto de las operaciones con el público en general; así como, aquellas que se realicen a cuenta de terceras personas.

El CFDI que ampara retenciones información de pagos

  • La versión será la 2.0.
  • Incluirá de manera obligatoria el nombre y domicilio fiscal del emisor y del receptor.
  • Permitirá relacionar otros CFDI.

El Complemento para recepción de pagos

  • La versión será 2.0.
  • Se incluyen nuevos campos para identificar sí los pagos de las operaciones que ampara el comprobante son objeto de impuestos.
  • Se incluye un nuevo apartado con el resumen de los importes totales de los pagos realizados expresados en moneda nacional, así como los impuestos que se trasladan.

Actualización al servicio de cancelación de facturas

  • A partir del 2022 será necesario señalar el motivo de la cancelación de los comprobantes.
  • Al seleccionar como motivo de cancelación la clave 01 “Comprobante emitido con errores con relación” deberá relacionarse el folio fiscal del comprobante que sustituye al cancelado.
  • Se actualizan los plazos para realizar la cancelación de facturas

 El contenido de esta página no crea derechos ni obligaciones distintos a los establecidos por las disposiciones fiscales. Es de carácter informativo.

CAMBIOS EN EL NODO COMPROBANTE

En la versión se especificara que es la versión 4.0 en lugar de la 3.5

Se agrega un nuevo atributo Exportación el cual sirve para expresar si el CFDI ampara una operación de exportación, su valor viene de un nuevo catálogo del SAT c_Exportacion

Valores que podrá tener c_Exportacion

  1. No aplica
  2. Definitiva
  3. Temporal

Se validará que el valor de este atributo exista en el catálogo c_Exportacion

En caso de que el tipo de exportación sea Definitiva se deberá capturar el complemento de Comercio Exterior.

Se agrega un nuevo nodo InformacionGlobal el cual sirve para mostrar información de facturas emitidas al público en general, o como dice en la información técnica “Nodo condicional para precisar la información relacionada con el comprobante global”, dentro de este nuevo nodo se incorporan los siguientes atributos:

Periodicidad.-  “Atributo requerido para expresar el período al que corresponde la información del comprobante global” El cual sirve para expresar el periodo al que corresponde la información de la factura global, su valor viene de un nuevo catálogo del SAT c_Periodicidad

Ejemplo de valores a capturar

  1. Diario
  2. Semanal
  3. Quincenal

Se validará que el valor de este atributo contenga un valor del catálogo c_Periodicidad

Se validará que el régimen fiscal sea 621(Incorporación Fiscal) en caso de que la periodicidad sea Bimestral

Meses.- “Atributo requerido para expresar el mes o los meses al que corresponde la información del comprobante global” El cual sirve para mostrar el o los meses a los que corresponde la información de la factura global, su valor viene de un nuevo catálogo del SAT c_Meses

ejemplo de los valores del catálogo c_Meses

  1. Enero
  2. Febrero
  3. Agosto – Septiembre

Se validará que el valor de este atributo contenga un valor del catálogo c_Meses

Se validará que el valor de este atributo tenga un mes único cuando el valor de la Periodicidad sea diferente de Bimestral, en caso contrario deberá tener un valor bimestral como Enero-Febrero.

Año.-  “Atributo requerido para expresar el año al que corresponde la información del comprobante global.” El cual sirve para mostrar el año al que corresponde la información de la factura global.

Se validará que el valor de este atributo sea igual al año en curso o al año inmediato anterior

Cambios en el nodo CfdiRelacionados

El nodo CfdiRelacionados cambia su estructura para poder relacionar múltiples CFDIs (Folios Fiscales) con su diferentes tipos de relación.

Se agrega un nuevo nodo ACuentaDeTerceros “Nodo opcional para registrar información del contribuyente Tercero, a cuenta del que se realiza la operación.”

RfcACuentaTerceros.- Atributo requerido para registrar la Clave del Registro Federal de Contribuyentes del contribuyente Tercero, a cuenta del que se realiza la operación.

Se validará que el RFC se encuentre en la lista LCO (Lista de Contribuyentes Obligados) del SAT

Se validará que el valor de este atributo sea diferente al RFC del Emisor y el RFC del Receptor

NombreACuentaTerceros.- Atributo requerido para registrar el nombre, denominación o razón social del contribuyente Tercero correspondiente con el Rfc, a cuenta del que se realiza la operación.

Se validará que el nombre se encuentre en las listas de RFCs inscritos no cancelados del SAT

Se validará que el nombre coincida con las listas de RFCs inscritos no cancelados del SAT

RegimenFiscalACuentaTerceros.– Atributo requerido para incorporar la clave del régimen del contribuyente Tercero, a cuenta del que se realiza la operación.

Se validará que el valor de este atributo contenga un valor del catálogo c_RegimenFiscal

DomicilioFiscalACuentaTerceros.– Atributo requerido para incorporar el código postal del domicilio fiscal del Tercero, a cuenta del que se realiza la operación.

Se validará que el valor del atributo contenga un valor del catálogo c_CodigoPostal

Se validará que el código postal se encuentre en la lista de RFCs inscritos no cancelados del SAT

Se validará que el código postal pertenezca al nombre asociado con el RFC del Tercero

Cambios al nodo Emisor

El atributo Nombre es requerido

Se validará que el valor de este atributo coincida con el nombre del titular del CSD (Certificado de sello digital).

Se validará que el valor de este atributo no coincida con el nombre del titular del CSD (Certificado de sello digital) cuando exista el atributo FacAtrAdquirente

Se agrega un nuevo atributo FacAtrAdquiriente el cual sirve para expresar el número de operación proporcionado por el SAT para los casos de emisión de CFDI a través de un adquiriente.

Se validará que el número de operación sea válido.

Cambios al nodo Receptor

El atributo Nombre es requerido

Se validará que el nombre se encuentre en las listas de RFCs inscritos no cancelados del SAT

Se validará que el nombre coincida con las listas de RFCs inscritos no cancelados del SAT

Se validará si el nombre es PUBLICO EN GENERAL el RFC deberá ser XAXX010101000

Se validará si el nombre no es PUBLICO EN GENERAL y el RFC es XAXX010101000 XEXX010101000, entonces el nombre no deberá coincidir con las listas de RFCs inscritos no cancelados del SAT

Se agrega un nuevo atributo DomicilioFiscalReceptor “Atributo requerido para registrar el código postal del domicilio fiscal del receptor del comprobante. el cual sirve para especificar el código postal del receptor, su valor viene del catálogo c_CodigoPostal

Se validará que el valor de este atributo contenga un valor del catálogo c_CodigoPostal

Se validará si el nombre es PUBLICO EN GENERAL el valor de este atributo deberá ser igual al valor del atributo LugarExpedicion.

Se validará que el código postal se encuentre en la lista de RFCs inscritos no cancelados del SAT

Se validará que el código postal pertenezca al nombre asociado con el RFC del Receptor

Se agrega un nuevo atributo RegimenFiscalReceptor “Atributo requerido para incorporar la clave del régimen fiscal del contribuyente receptor al que aplicará el efecto fiscal de este comprobante.” el cual sirve para especificar el régimen fiscal del receptor del CFDI, su valor viene del catálogo c_RegimenFiscal.

Se validará que el valor de este atributo contenga un valor del catálogo c_RegimenFiscal

Se validará que el régimen fiscal coincida con el tipo de persona física o moral

Se validará si el RFC del receptor es genérico, en este caso el régimen fiscal deberá ser 616 (Sin obligaciones fiscales)

Se modifica la validación del atributo UsoCFDI, el cual deberá corresponder con el tipo de persona física o moral, adicionalmente se validará que corresponda con un valor del catálogo c_UsoCFDI

Cambios al nodo Conceptos

Se agrega un nuevo atributo ObjetoImp, “Atributo requerido para expresar si la operación comercial es objeto o no de impuesto.” sirve para expresar si la operación es o no objeto de impuestos, viene de un nuevo catálogo del SAT c_ObjetoImp.

Ej. de valores del nuevo catálogo c_ObjetoImp

  1. 01 No objeto de impuesto
  2. 02 Sí objeto de impuesto
  3. 03 Sí objeto de impuesto y no obligado al desglose

Se validará que el valor de este atributo contenga un valor del catálogo c_ObjetoImp

Se validará si el valor de este atributo es igual a Sí objeto de impuesto, entonces deberá existir el nodo hijo Concepto/Impuestos.

Cambios al nodo Impuestos/Traslados/Traslado

Se agrega un nueva atributo Base, sirve para expresar la sumatoria de los importes Base de los conceptos con traslado.

Se validará que este atributo tenga hasta la cantidad de decimales que soporte la moneda

Se validará que el valor de este atributo sea igual al redondeo de la sumatoria de las bases trasladadas de los conceptos agrupados por tipo de impuesto y tasa

Se agrega una nueva regla de validación, si sólo existen conceptos con impuesto de tipo Exento en este nodo solo deberán existir los atributos Base, Impuesto y TipoFactor.

JCPOS 2021 AGREGANDO MODULO DE CAJA

Mostraremos un vídeo introductorio de como funcionara el modulo de caja

FORO
https://foro.cesarsystems.com.mx/

DISCORD
https://discord.gg/7cJSkMxA

FACEBOOK
https://www.facebook.com/rasec555

TWITTER
https://twitter.com/JulioLeyvaR

CHANNEL TELEGRAM
https://telegram.me/CesarSystems

PAGINA WEB
https://cesarsystems.com.mx

TWITCH
https://www.twitch.tv/bardack21

DLIVE
https://dlive.tv/JulitoLeyva

ODYSEE
https://odysee.com/@JulioCesarLeyvaRodriguez:9

GUARDAR IMAGENES EN FILE SYSTEM O EN BASE DE DATOS?

En este vídeo meditaremos cual sera la mejor opción para el punto de venta, si guardar las imagenes en filesystem o en base de datos
FORO
https://foro.cesarsystems.com.mx/

DISCORD
https://discord.gg/7cJSkMxA

FACEBOOK
https://www.facebook.com/rasec555

TWITTER
https://twitter.com/JulioLeyvaR

CHANNEL TELEGRAM
https://telegram.me/CesarSystems

PAGINA WEB
https://cesarsystems.com.mx

TWITCH
https://www.twitch.tv/bardack21

DLIVE
https://dlive.tv/JulitoLeyva

ODYSEE
https://odysee.com/@JulioCesarLeyvaRodriguez:9

MOSTRAR IMAGEN DE PERFIL EN CONFIGURACIONES USANDO PHP MySQL, Base54

Ya quedaron las altas y modificaciones de la imagen en el campo de MySQL, ahora los mostraremos en el menu y en el perfil
FORO
https://foro.cesarsystems.com.mx/

DISCORD
https://discord.gg/7cJSkMxA

FACEBOOK
https://www.facebook.com/rasec555

TWITTER
https://twitter.com/JulioLeyvaR

CHANNEL TELEGRAM
https://telegram.me/CesarSystems

PAGINA WEB
https://cesarsystems.com.mx

TWITCH
https://www.twitch.tv/bardack21

DLIVE
https://dlive.tv/JulitoLeyva

ODYSEE
https://odysee.com/@JulioCesarLeyvaRodriguez:9

ACTUALIZAR IMAGEN EN CAMPO MYSQL

Ya hicimos el insert en la base de datos del archivo de la imagen, tambien la mostramos en las vistas, ahora sigue hacer la modificacion “UPDATE” en la base de datos
FORO

https://foro.cesarsystems.com.mx/
DISCORD

https://discord.gg/7cJSkMxA

FACEBOOK
https://www.facebook.com/rasec555

TWITTER
https://twitter.com/JulioLeyvaR

CHANNEL TELEGRAM
https://telegram.me/CesarSystems

PAGINA WEB
https://cesarsystems.com.mx

TWITCH
https://www.twitch.tv/bardack21

DLIVE
https://dlive.tv/JulitoLeyva

ODYSEE
https://odysee.com/@JulioCesarLeyvaRodriguez:9

MOSTRANDO LA IMAGEN GUARDADA EN MYSQL EN LA VISTA

FORO
https://foro.cesarsystems.com.mx/

DISCORD
https://discord.gg/7cJSkMxA

FACEBOOK https://www.facebook.com/rasec555

TWITTER
https://twitter.com/JulioLeyvaR CHANNEL

TELEGRAM https://telegram.me/CesarSystems

PAGINA WEB
https://cesarsystems.com.mx

TWITCH
https://www.twitch.tv/bardack21

DLIVE
https://dlive.tv/JulitoLeyva

ODYSEE
https://odysee.com/@JulioCesarLeyvaRodriguez:9

GRABANDO IMAGEN EN COLUMNA DE BASE DE DATOS MYSQL CON PHP8

LES MOSTRARE UNA BREVE EXPLICACION DE COMO GENERAR GRAFICAS CON LA INFORMACIÓN GUARDADA ENUNA BASE DE DATOS MYSQL
FORO
https://foro.cesarsystems.com.mx/

DISCORD
https://discord.gg/7cJSkMxA

FACEBOOK
https://www.facebook.com/rasec555

TWITTER
https://twitter.com/JulioLeyvaR

CHANNEL TELEGRAM
https://telegram.me/CesarSystems

PAGINA WEB
https://cesarsystems.com.mx

TWITCH
https://www.twitch.tv/bardack21
DLIVE
https://dlive.tv/JulitoLeyva
ODYSEE
https://odysee.com/@JulioCesarLeyvaRodriguez:9

Aplicaciones en Redes Descentralizadas Holochain, Probando Kizuna Chat

REVIEW UBUNTU 21.10 NOVEDADES

Les dejo esta Review mostrando las novedades
FORO
https://foro.cesarsystems.com.mx/

FACEBOOK
https://www.facebook.com/rasec555

TWITTER
https://twitter.com/JulioLeyvaR

CHANNEL TELEGRAM
https://telegram.me/CesarSystems

PAGINA WEB
https://cesarsystems.com.mx

TWITCH
https://www.twitch.tv/bardack21

DLIVE
https://dlive.tv/JulitoLeyva

ODYSEE
https://odysee.com/@JulioCesarLeyvaRodriguez:9

Subir imágenes en base de datos con PHP8 y mariaDB

Les dejo un ejemplo básico en donde vemos como meter las imágenes en un campo en la base de datos en lugar de guardarlo en el filesystem.

Saludos espero que les sirva

HTML MODAL


<!--===================================== 
MODAL IMAGENES
 ======================================--> 


<div id="modalImagenesVehiculos" class="modal fade" role="dialog"> 

    <div class="modal-dialog"> 

        <div class="modal-content"> 

            <form role="form" method="post" enctype="multipart/form-data"> 

                <!--===================================== 
                CABEZA DEL MODAL 
                ======================================--> 

                <div class="modal-header" style="background:#3c8dbc; color:white"> 

                    <button type="button" class="close" data-dismiss="modal">&times;</button> 

                    <h4 class="modal-title"> Imagenes </h4> 

                </div> 
                <!--===================================== 
                CUERPO DEL MODAL 
                ======================================--> 

                <div class="modal-body"> 

                    <div class="box-body"> 




                        <!-- EMPEZAMMOS CON LAS PESTAÑAS -->
                        <ul class="nav nav-tabs">

                            <li class="active"><a data-toggle="tab" href="#Subir">Subir Imagenes</a></li>

                            <li><a data-toggle="tab" href="#Imagenes">Imagenes</a></li>


                        </ul>


                        <!-- CONTENIDO DE LAS PESTAÑAS -->
                        <div class="tab-content">

                            <div id="Subir" class="tab-pane fade in active">

                                <h3>Subir Imagen</h3>

                                <p>    
                                    <!-- ENTRADA PARA SUBIR FOTO -->

                                <div class="form-group">



                                    <input type="file" class="nuevaFoto" name="editarFoto" id="editarFoto">

                                    <p class="help-block">Peso máximo de la foto 2MB</p>

                                    <img src="vistas/img/plantilla/imagenesDocumentos.jpeg" class="img-thumbnail previsualizarEditar" width="100px">



                                </div>


                                <!-- ENTRADA PARA LA DESCRIPCION --> 

                                <div class="form-group"> 

                                    <div class="input-group"> 

                                        <span class="input-group-addon">Descripcion: </span>  

                                        <input type="text" class="form-control input-lg" name="descripcionImagen" id="descripcionImagen" placeholder="Ingresar Descripcion" required> 

                                        <input type="hidden" class="form-control input-lg" name="idVehiculo" id="idVehiculo" name="idVehiculo"> 

                                    </div> 

                                </div> 


                            </div> 


                            <div id="Imagenes" class="tab-pane fade">

                                <h3>Imagenes</h3>

                                <p>    

                                    <!--=====================================
                                    CONTROLES
                                    ======================================-->

                                <table class="table table-bordered table-striped dt-responsive tablaImagenesVehiculos" width="100%">


                                    <thead>


                                        <tr>

                                            <th style="width:10px">ID</th>
                                            <th>Descripción</th>
                                            <th>Imagen </th>
                                            <th>Acciones </th>



                                        </tr> 

                                    </thead>

                                    <tbody>

                                        <tr>
                                            <td>1</td>
                                            <td>9000</td>
                                            <td>1000</td>
                                            <td>1000</td>

                                        </tr>



                                    </tbody>

                                </table>


                            </div> 

                        </div> 


                        </p>
                    </div>
                </div>
                <!--===================================== 
                PIE DEL MODAL 
                ====================================== --> 

                <div class="modal-footer"> 

                    <button type="button" class="btn btn-default pull-left" data-dismiss="modal">Salir</button> 

                    <button type="button" class="btn btn-primary guardarImagen">Guardar</button> 

                </div> 


            </form> 

        </div> 

    </div> 

</div> 

Código Javascript

 //SUBIR IMAGENES
    $(".modal-footer").on("click", ".guardarImagen", function () {


        console.log("Prueba");



        //VALIDADACIONES


        if ($("#descripcionImagen").val() == "") {
            swal({
                type: "error",
                title: "Falta Capturar la Descripcion",
                showConfirmButton: true,
                confirmButtonText: "Cerrar"
            })

            return;
        }



        //VERIFICA SI ESCRIBIO EL CORREO ELECTRONICO
        if ($(".nuevaFoto").val() == "") {
            swal({
                type: "error",
                title: "Falta capturar la foto",
                showConfirmButton: true,
                confirmButtonText: "Cerrar"
            })

            return;
        }



         $(".guardarImagen").attr("disabled",true);
         $(".guardarImagen").html("Guardando...");

        //SUBIR ARCHIVO

        var descripcionImagen = $("#descripcionImagen").val();
        var imagen = $(".nuevaFoto").prop("files")[0];
        var idVehiculo = $("#idVehiculo").val();

        console.log("Imagen:", imagen);

        var datosDocumento = new FormData();


        datosDocumento.append("guardarImagenVehiculo", "guardarImagenVehiculo");

        datosDocumento.append("descripcionImagen", descripcionImagen);
        datosDocumento.append("idVehiculo", idVehiculo);
        datosDocumento.append("imagen", imagen);




        $.ajax({

            url: "controladores/imagenVehiculos.controlador.php",
            method: "POST",
            data: datosDocumento,
            cache: false,
            contentType: false,
            processData: false,
            //dataType: "json",
            success: function (respuesta) {

                console.log(respuesta);
                if (respuesta == "ok") {
                    swal({
                        type: "success",
                        title: "Guardado Correctamente",
                        showConfirmButton: true,
                        confirmButtonText: "Cerrar"
                    }).then(function (result) {
                        if (result.value) {
                            
                              $(".guardarImagen").removeAttr("disabled");
                              $(".guardarImagen").html("Guardar");

                            $('.tablaImagenesVehiculos').DataTable().destroy();
                            cargaImagenesVehiculos(idVehiculo);

                        }


                    });





                    return;
                } else {

                    if (respuesta.match(/Duplicate entry.*/)) {
                        swal({
                            type: "error",
                            title: "El UUID de documento ya esta en uso, favor de recargar la pagina",
                            showConfirmButton: true,
                            confirmButtonText: "Cerrar"

                        })

                        return;
                    }

                    $(".guardarImagen").removeAttr("disabled");
                    $(".guardarImagen").html("Guardar");
                 
                    swal({
                        type: "error",
                        title: "" + respuesta + "",
                        showConfirmButton: true,
                        confirmButtonText: "Cerrar"
                    })
                }
            }

        })

    });



    //TRAER LISTA DE IMAGENES EN DATATABLE
    $(".tablaVehiculos").on("click", ".btnImagenesVehiculos", function () {


        var idVehiculo = $(this).attr("idVehiculo");
        
        $('.tablaImagenesVehiculos').DataTable().destroy();
        $("#idVehiculo").val(idVehiculo);
        console.log("asd");
        cargaImagenesVehiculos(idVehiculo);


        return;

    });



    //ELIMINAR  IMAGEN
    $(".tablaImagenesVehiculos").on("click", ".btnEliminarImagenVechiculo", function () {


        var idImagen = $(this).attr("idimagenvehiculo");
        
        var idVehiculo = $(this).attr("idVehiculo");

        console.log("PRUEBA ELIMINAR:", idImagen);


        swal({
            title: '¿Está seguro de borrar la imagen?',
            text: "¡Si no lo está puede cancelar la accíón!",
            type: 'warning',
            showCancelButton: true,
            confirmButtonColor: '#3085d6',
            cancelButtonColor: '#d33',
            cancelButtonText: 'Cancelar',
            confirmButtonText: 'Si, borrar venta!'
        }).then(function (result) {
            if (result.value) {
                
                
                var datosDocumento = new FormData();


                datosDocumento.append("eliminarImagenVehiculo", "eliminarImagenVehiculo");

                datosDocumento.append("idImagen", idImagen);



                $.ajax({

                    url: "controladores/imagenVehiculos.controlador.php",
                    method: "POST",
                    data: datosDocumento,
                    cache: false,
                    contentType: false,
                    processData: false,
                    //dataType: "json",
                    success: function (respuesta) {

                        console.log(respuesta);
                        if (respuesta == "ok") {
                            swal({
                                type: "success",
                                title: "Eliminado Corecctamente",
                                showConfirmButton: true,
                                confirmButtonText: "Cerrar"
                            }).then(function (result) {
                                if (result.value) {

                                    $('.tablaImagenesVehiculos').DataTable().destroy();
                                    cargaImagenesVehiculos(idVehiculo);

                                }


                            });





                            return;
                        }
                    }


                })
            }

        })


        return;

    });




    function cargaImagenesVehiculos(idVehiculo
            )
    {






        var dataTable = $('.tablaImagenesVehiculos').DataTable({

            "processing": true,
            "serverSide": false,
            "deferRender": true,
            "retrieve": true,
            "pageLength": 5,
            "lengthMenu": [5, 10, 25, 50, 100, 150, 200],

            "language": {

                "sProcessing": "Procesando...",
                "sLengthMenu": "Mostrar _MENU_ registros",
                "sZeroRecords": "No se encontraron resultados",
                "sEmptyTable": "Ningún dato disponible en esta tabla",
                "sInfo": "Mostrando registros del _START_ al _END_ de un total de _TOTAL_",
                "sInfoEmpty": "Mostrando registros del 0 al 0 de un total de 0",
                "sInfoFiltered": "(filtrado de un total de _MAX_ registros)",
                "sInfoPostFix": "",
                "sSearch": "Buscar:",
                "sUrl": "",
                "sInfoThousands": ",",

                "sLoadingRecords": "Cargando...",
                "oPaginate": {
                    "sFirst": "Primero",
                    "sLast": "Último",
                    "sNext": "Siguiente",
                    "sPrevious": "Anterior"
                },
                "oAria": {
                    "sSortAscending": ": Activar para ordenar la columna de manera ascendente",
                    "sSortDescending": ": Activar para ordenar la columna de manera descendente"
                }

            },
            "ajax": {
                url: "ajax/datatable-imagenesVehiculo.ajax.php",
                type: "POST",

                data: {
                    tablaImagenVechiculos: "tablaImagenVechiculos",
                    idVehiculo1: idVehiculo

                }


            }

        });

    }

Archivo AJAX para datatable de las imagenes

<?php


require_once "../modelos/generales.modelo.php";
session_start();

if (!$_SESSION["iniciarSesion"]) {
    return;
}



if(isset($_POST["tablaImagenVechiculos"])){
    
    $idVehiculo = $_POST["idVehiculo1"];
    
       $campos = " * ";
  
       $where=" and a.idVehiculo = $idVehiculo ";

       $nominas = ModeloGenerales::mdlMostrarTabla(" imagenesVehiculos  ",$campos,$where);
    

        if (count($nominas) == 0) {

            echo '{"data": []}';

            return;
        }

        $datosJson = '{

		
		  "data": [';

        for ($i = 0; $i < count($nominas); $i++) {



            $imagen="<img src='data:image/png;base64, ".base64_encode($nominas[$i]["imagen"])."' data-action='zoom' class='img-thumbnail' width='40px'>";
            $botones = "<div class='btn-group'><button type='button' class='btn btn-danger btnEliminarImagenVechiculo' idVehiculo='" . $nominas[$i]["idVehiculo"] ."' idImagenVehiculo='" . $nominas[$i]["id"] ."'><i class='fa fa-trash-o'></i></button></div>";
            
         
            
            $datosJson .= '[
						"' . $nominas[$i]["id"] . '", 
						"' . $nominas[$i]["descripcion"] . '",
						
						
                                                "'.$imagen.'",
                                                "'.$botones.'"
			    ],';
        }

        $datosJson = substr($datosJson, 0, -1);

        $datosJson .= '] 

		 }';

        echo $datosJson;
}

imagenVehiculos.controlador.php

<?php

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 * Description of imagenVehiculos
 *
 * @author Julio Cesar Leyva Rodriguez
 */
class ControladorImagenVehiculos {
    
    
}



//GUARDA ESTADO DESDE SISTEMA
if (isset($_POST["guardarImagenVehiculo"])){
    
    include "../modelos/conexion.php";
    include "../modelos/imagenVehiculos.modelo.php";

    
    date_default_timezone_set('America/Chihuahua');
    
     if ((isset($_FILES['imagen'])) && ($_FILES['imagen'] != '')) {

        $file = fopen($_FILES['imagen']['tmp_name'], "rb");

        $fileName = "";
        $fileExtension = "";
    } else {
        $file = "";
    }
    
    

    
    $datos["idVehiculo"]=$_POST["idVehiculo"];
    $datos["descripcion"]=$_POST["descripcionImagen"];
    $datos["imagen"]=$file;
    
    $resultado = ModeloImagenVehiculos::mdlIngresarImagenesVehiculos("imagenesVehiculos",  $datos);


    echo $resultado;
    
}


//GUARDA ESTADO DESDE SISTEMA
if (isset($_POST["eliminarImagenVehiculo"])){
    
    include "../modelos/conexion.php";
    include "../modelos/imagenVehiculos.modelo.php";

    
    date_default_timezone_set('America/Chihuahua');
   

    
    $datos["id"]=$_POST["idImagen"];

    
    $resultado = ModeloImagenVehiculos::mdlEliminarImagenVechiculo("imagenesVehiculos",  $datos);


    echo $resultado;
    
}

imagenVehiculos.modelo.php

<?php

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 * Description of imagenVehiculos
 *
 * @author Julio Cesar Leyva Rodriguez
 */
require_once "conexion.php";


Class ModeloImagenVehiculos {
    
    
    
   // INGRESA MOVIMIENTO DESDE SISTEMA
    static public function mdlIngresarImagenesVehiculos($tabla, $datos) {

        $stmt = Conexion::conectar()->prepare("INSERT INTO $tabla(idVehiculo
                                                                ,descripcion
                                                                ,imagen
                                                                 ) 
                                                            VALUES (:idVehiculo
                                                                ,:descripcion
                                                                ,:imagen
                                                            )");

        $stmt->bindParam(":idVehiculo", $datos["idVehiculo"], PDO::PARAM_STR);
        $stmt->bindParam(":descripcion", $datos["descripcion"], PDO::PARAM_STR);
        $stmt->bindParam(":imagen", $datos["imagen"], PDO::PARAM_LOB);

        if ($stmt->execute()) {

            return "ok";
        } else {

            $arr = $stmt->errorInfo();
            return $arr[2];
        }

        $stmt->close();
        $stmt = null;
    }
    
    
    
     static public function mdlEliminarImagenVechiculo($tabla, $datos) {

        $stmt = Conexion::conectar()->prepare("delete from $tabla where id=:id
                                                            ");

        $stmt->bindParam(":id", $datos["id"], PDO::PARAM_INT);

        if ($stmt->execute()) {

            return "ok";
        } else {

            $arr = $stmt->errorInfo();
            return $arr[2];
        }

        $stmt->close();
        $stmt = null;
    }
    
    
}

Página 23 de 139

Creado con WordPress & Tema de Anders Norén