CRUD de Servicios Demo

download CRUD de Servicios Demo

of 24

Transcript of CRUD de Servicios Demo

  • 8/18/2019 CRUD de Servicios Demo

    1/24

    CRUD de Servicios

    Index.php

    Personal Grupo Hurtado

    //Las siguientes 5 líneas de código invocan al grid de servicios, además de darle formato al

    mismo.

    //Las siguientes líneas crean una ventana oculta de editar servicios 

    Editar

  • 8/18/2019 CRUD de Servicios Demo

    2/24

    Servicio:

    Descripcion:

    Fecha_Servicio:

    Costo:

    Vehiculo:

  • 8/18/2019 CRUD de Servicios Demo

    3/24

    Proveedor:

    No_Factura:

    // Este es el fin de la ventana emergente de editar servicios.

    // Las siguientes líneas crean el botón de exportar el contenido de grid a un archivo Excel.

  • 8/18/2019 CRUD de Servicios Demo

    4/24

    // Este es el fin del código que crea el botón de exportar a Excel.

    // Fin del index.php del crud de vehículos.

    Servicios.class.php

    Este archivo php contiene las funciones que conectan con el servidor MySQL

  • 8/18/2019 CRUD de Servicios Demo

    5/24

    // Función de conexión

    function conMySQL(){

    global $server;

    // Variables de conexión

    $user = $server['muser'];

    $pass = $server['mpass'];

    $serv = $server['mserver'];

    // Conexión a MySQL mediante PDO.

    $this->cMySQL = new PDO('mysql:host='.$serv.';dbname=control_vehicular;charset=utf8',

    "$user", "$pass", array(PDO::ATTR_EMULATE_PREPARES => false,

    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,

    PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));

    }

    // Función para obtener datos del servicio

    function getServicios(){

    // Consulta para obtener servicios mecánicos 

    $consulta = "SELECT s.idservicio, s.tipo, ts.tipo as tipo2, s.descripcion, s.fecha_servicio,

    s.costo, s.idvehiculo, CONCAT('Vehiculo: ', m.marca,' color: ', c.color, ' adquirido: ',

    v.fechaadquisicion) as vehiculo, s.idproveedor, CONCAT('', p.razon_social,', Encargado: ',

     p.nombre) as proveedor, s.nofactura FROM control_vehicular.servicios as s,

    control_vehicular.catalogo_tipo_servicio as ts, control_vehicular.vehiculos as v,

    control_vehicular.catalogo_color as c, control_vehicular.catalogo_marca as m,

    control_vehicular.proveedor as p WHERE s.idservicio > 0 and

    s.tipo=ts.idcatalogo_tipo_servicio and v.color=c.idcatalogo_color and

    s.idvehiculo=v.idvehiculo and v.idvehiculo > 0 and v.marca=m.idcatalogo_marca and

    v.estatus = 'activo' and c.estatus = 'activo' and m.estatus = 'activo' and

  • 8/18/2019 CRUD de Servicios Demo

    6/24

    s.idproveedor=p.idproveedor and p.idproveedor > 0 and p.estatus = 'activo' and s.estatus =

    'activo' and ts.estatus= 'activo'";

    //Ejecución de la consulta.

    $query = $this->cMySQL->query($consulta);

    // Retorno de resultados de la consulta.

    return json_encode($query->fetchAll(PDO::FETCH_ASSOC));

    }

    // Consultas para obtener catálogos

    // Catalogo de tipos de servicios mecánicos

    function getCatalogoTS(){ //$empresa = "4"

    $consulta = "SELECT idcatalogo_tipo_servicio,tipo FROM

    control_vehicular.catalogo_tipo_servicio WHERE estatus = 'activo' ORDER BY

    idcatalogo_tipo_servicio";

    $query = $this->cMySQL->query($consulta);

    return json_encode($query->fetchAll(PDO::FETCH_ASSOC));

    }

    // Catalogo de vehiculos

    function getCatalogoV(){

    $consulta = "SELECT v.idvehiculo, CONCAT('Vehiculo: ', m.marca,' color: ', c.color, '

    adquirido: ', v.fechaadquisicion) as vehiculo FROM control_vehicular.vehiculos as v,

    control_vehicular.catalogo_marca as m, control_vehicular.catalogo_color as c WHERE

    v.color=c.idcatalogo_color and v.marca=m.idcatalogo_marca and v.estatus= 'activo' and

    m.estatus= 'activo' and c.estatus= 'activo'";

    $query = $this->cMySQL->query($consulta);

    return json_encode($query->fetchAll(PDO::FETCH_ASSOC));

  • 8/18/2019 CRUD de Servicios Demo

    7/24

    }

    // Catalogo de mecanicos

    function getCatalogoC(){

    $consulta = "SELECT idproveedor, CONCAT('', razon_social,', Encargado: ', nombre) as

    nombre FROM control_vehicular.proveedor WHERE estatus = 'activo' ORDER BY

    idproveedor";

    $query = $this->cMySQL->query($consulta);

    return json_encode($query->fetchAll(PDO::FETCH_ASSOC));

    }

    // Fin de consultas de catalogos

    // Actualizar Servicios

    function ActualizaServicios($idservicio, $tipo, $descripcion, $fecha_servicio, $costo,

    $idvehiculo, $idproveedor, $nofactura){

    // La función pide como parámetros datos de la ventana emergente de editar servicios para poder actualizar. 

    $msg = "";

    $qryI = "";

    $ok = "ok";

    //Dentro del try se trata de hacer la actualización de los datos y la recarga de la pantalla para

    que se aprecie la actualización del registro.

    try{

    $this->cMySQL->beginTransaction();

  • 8/18/2019 CRUD de Servicios Demo

    8/24

    $qryI = "UPDATE control_vehicular.servicios SET tipo = '$tipo', descripcion =

    '$descripcion', fecha_servicio = '$fecha_servicio', costo = '$costo', idvehiculo =

    '$idvehiculo', idproveedor = '$idproveedor', nofactura = '$nofactura' WHERE idservicio =

    '$idservicio'";

    $msg = "Registro Actualizado";

    $stmt = $this->cMySQL->prepare($qryI);

    $stmt->execute();

    $registro=$this->cMySQL->lastInsertId();

    $this->cMySQL->commit();

    }

    // Si el try no funciona se restablece a un estado anterior mediante la función rollBack() para

    no tener errores dentro de la base de datos.

    catch(PDOException $ex){

    $this->cMySQL->rollBack();

    $msg = $ex->getMessage();

    $ok = "error";

    }

    }

    //Esta función actualiza el estatus del servicio para darlo de baja.

    function ActualizaEstatus($idservicio){

    $msg = "";

    $qryI = "";

    $ok = "ok";

  • 8/18/2019 CRUD de Servicios Demo

    9/24

    // Dentro del try se hace la consulta si el parámetro existe y no hay error durante el proceso

    se da de baja el registro.

    try{

    $this->cMySQL->beginTransaction();

    $qryI = "UPDATE control_vehicular.servicios SET estatus = 'inactivo'

    WHERE idservicio = '$idservicio'";

    $msg = "Registro Actualizado";

    $stmt = $this->cMySQL->prepare($qryI);

    $stmt->execute();

    $registro=$this->cMySQL->lastInsertId();

    $this->cMySQL->commit();

    }

    // Si el try no funciona se restablece a un estado anterior mediante la función rollBack() para

    no tener errores dentro de la base de datos.

    catch(PDOException $ex){

    $this->cMySQL->rollBack();

    $msg = $ex->getMessage();

    $ok = "error";

    }

    }

  • 8/18/2019 CRUD de Servicios Demo

    10/24

    //La función procesar se encarga de enviar y recibir la información de las consultas MySQL

    realizadas en las funciones anteriores.

    function procesar(){

    if (isset($_POST['getservicios'])){

    echo $this->getServicios("04");

    }

    if (isset($_POST['getcatalogots'])){

    echo $this->getCatalogoTS("04");

    }

    if (isset($_POST['getcatalogov'])){

    echo $this->getCatalogoV("04");

    }

    if (isset($_POST['getcatalogoc'])){

    echo $this->getCatalogoC("04");

    }

    if (isset($_POST['actualizaServicios'])){

    echo $this->ActualizaServicios($_POST['idservicio'], $_POST['tipo'],

    $_POST['descripcion'], $_POST['fecha_servicio'], $_POST['costo'],

    $_POST['idvehiculo'], $_POST['idproveedor'], $_POST['nofactura']);

    }

    if (isset($_POST['actualizaEstatus'])){

    echo $this->ActualizaEstatus($_POST['idservicio']);

    }

  • 8/18/2019 CRUD de Servicios Demo

    11/24

    }

    }

    // Fin de la función procesar

    // Objeto de la clase de operaciones.

    $obj = new operaciones();

    ?>

    //Fin de vehículos.class.php

    Servicio.js

    $(document).ready(function () {

    var theme = "";

    // Datos de catálogos

    // Datos de catálogo de marcas

    var srcCTS = {

    async: false,

    datatype: "json",

    datafields: [

    {name: 'idcatalogo_tipo_servicio', type: 'integer'},

    {name: 'tipo', type: 'string'}

    ],

    type: 'POST',

    url: 'servicio.class.php',

    root: 'data',

  • 8/18/2019 CRUD de Servicios Demo

    12/24

    id: "idcatalogo_tipo_servicio",

    data: {

    getcatalogots: 'y',

    }

    };

    var daCTS = new $.jqx.dataAdapter(srcCTS);

    // Datos de catalogo de clases

    var srcCVehiculo = {

    async: false,

    datatype: "json",

    datafields: [

    {name: 'idvehiculo', type: 'integer'},

    {name: 'vehiculo', type: 'string'}

    ],

    type: 'POST',

    url: 'servicio.class.php',

    root: 'data',

    id: "idvehiculo",

    data: {

    getcatalogov: 'y',

    }

    };

    var daCVehiculos = new $.jqx.dataAdapter(srcCVehiculo);

  • 8/18/2019 CRUD de Servicios Demo

    13/24

    // Datos de catálogo de proveedores

    var srcCProveedor = {

    async: false,

    datatype: "json",

    datafields: [

    {name: 'idproveedor', type: 'integer'},

    {name: 'nombre', type: 'string'}

    ],

    type: 'POST',

    url: 'servicio.class.php',

    root: 'data',

    id: "idproveedor",

    data: {

    getcatalogoc: 'y',

    }

    };

    var daCProveedores = new $.jqx.dataAdapter(srcCProveedor);

    // Función para dar formato a tipo date para el php

    function Fecha2Str(fecha) {

    return ([fecha.getFullYear(), fecha.getMonth() + 1 < 10 ? "0" + (fecha.getMonth() + 1) :

    fecha.getMonth() + 1, fecha.getDate() < 10 ? "0" + fecha.getDate() :

    fecha.getDate()].join('/'));

  • 8/18/2019 CRUD de Servicios Demo

    14/24

    }

    // Datos de grid o tabla principal que se muestra en el index.php

    var srcServicios = {

    async: false,

    datatype: "json",

    datafields: [

    {name: 'idservicio', type: 'integer'},

    {name: 'tipo', type: 'integer'},

    {name: 'tipo2', type: 'string'},

    {name: 'descripcion', type: 'string'},

    {name: 'fecha_servicio', type: 'date', format: 'yyyy-MM-dd'},

    {name: 'costo', type: 'double'},

    {name: 'idvehiculo', type: 'integer'},

    {name: 'vehiculo', type: 'string'},

    {name: 'idproveedor', type: 'integer'},

    {name: 'proveedor', type: 'string'},

    {name: 'nofactura', type: 'string'}

    ],

    type: 'POST',

    url: 'servicio.class.php',

    root: 'data',

    data: {

  • 8/18/2019 CRUD de Servicios Demo

    15/24

    getservicios: 'y',

    }

    };

    var daServicios = new $.jqx.dataAdapter(srcServicios);

    // Inicializar los campos de la ventana emergente de editar

    //Elemento lista desplegable de tipo

    $("#tipo").jqxDropDownList({ selectedIndex: -1, source: daCTS, displayMember: "tipo",

    valueMember: "idcatalogo_tipo_servicio", width: 150, height: 23, placeHolder:"ServicioMecanico:" });

    //Elemento de área de texto para la descripción

    $("#descripcion").jqxTextArea({width: 150, height: 60});

    //Elemento calendario para fecha de servicio

    $("#fecha_servicio").jqxDateTimeInput({ width: 150, height: 23 });

    //elemento de números para modificar el costo

    $("#costo").jqxNumberInput({spinMode: 'simple', width: 150, height: 23, min: 0,

    decimalDigits: 0, spinButtons: true });

    //Elemento lista desplegable de vehiculos

    $("#idvehiculo").jqxDropDownList({ selectedIndex: -1, source: daCVehiculos,

    displayMember: "vehiculo", valueMember: "idvehiculo", width: 150, height: 23,

     placeHolder:"Vehiculos:" });

    //Elemento lista desplegable de proveedor

    $("#idproveedor").jqxDropDownList({ selectedIndex: -1, source: daCProveedores,

    displayMember: "nombre", valueMember: "idproveedor", width: 150, height: 23,

     placeHolder:"Proveedor:" });

  • 8/18/2019 CRUD de Servicios Demo

    16/24

    //Elemento de entrada simple de texto para capturar el número de factura

    $("#nofactura").jqxInput({width: 150, height: 23});

    // Botón de cancelar

    $("#Cancel").jqxButton({ theme: theme });

    //Ventana emergente

    $("#popupWindow").jqxWindow({width: 450, resizable: false, isModal: true, autoOpen:

    false, cancelButton: $("#Cancel"), modalOpacity: 0.01});

    //Botón de guardar función que realizará cuando se de click

    $("#save").jqxButton({ theme: theme }).click(function (){

    //Arreglo que contiene los datos del registro utilizado para la función de actualizar servicios

    en el archivo servicio.class.php

    var reg = {

    idservicio : $("#idservicio").val(),

    tipo : $("#tipo").val(),

    descripcion : $("#descripcion").val(),

    fecha_servicio : Fecha2Str($("#fecha_servicio").jqxDateTimeInput('value')),

    costo : $("#costo").val(),

    idvehiculo : $("#idvehiculo").val(),

    idproveedor : $("#idproveedor").val(),

    nofactura : $("#nofactura").val(),

    actualizaServicios : 'y'

    }

  • 8/18/2019 CRUD de Servicios Demo

    17/24

    //Función que evalúa si existen realmente valores en el registro.

    if(reg.idservicio && reg.tipo && reg.descripcion && reg.fecha_servicio && reg.costo &&

    reg.idvehiculo && reg.idproveedor && reg.nofactura){

    //Si la condición se cumple se realiza la actualización del registro.

    $.ajax({

    async: false,

    url: 'servicio.class.php',

    type: 'POST',

    dataType: 'xml/html/script/json/jsonp',

    data: reg,

    complete: function(data, xhr, textStatus){

    daServicios.dataBind();

    },

    success: function(data, textStatus, xhr) {

    },

    error: function(xhr, textStatus, errorThrown) {}

    });

    }else{

    // En caso contrario de no cumplirse se manda una alerta diciendo que los datos no están

    completos y estos deben ser verificados.

    alert("No se han proporcionado los datos completos, por favor verifíquelos");

    }

    });

  • 8/18/2019 CRUD de Servicios Demo

    18/24

    // Creación del botón de guardar

    $("#popupWindow").jqxWindow({

    width: 450, resizable: false, isModal: true, autoOpen: false, cancelButton: $("#save"),

    modalOpacity: 0.01});

    //Creación del grid o tabla principal que muestra la información del crud

    $("#jqxgrid").jqxGrid(

    {

    width: "100%",

    source: daServicios,

    showfilterrow: true,

    filterable: true,

     pageable: true,

    autoheight: true,

    sortable: true,

    altrows: true,

    columnsresize: true,

    enabletooltips: true,

    editable: false,

    selectionmode: 'multiplecellsadvanced',

    columns: [

    { text: 'ID', datafield: 'idservicio', hidden: true},

    { text: 'tipo', datafield: 'tipo', cellsalign: 'right', align: 'right', width: "8%", hidden: true },

  • 8/18/2019 CRUD de Servicios Demo

    19/24

    { text: 'SERVICIO MECANICO', datafield: 'tipo2', columntype: 'textbox', filtertype:

    'textbox', cellsalign: 'right', align: 'right', width: "10%"},

    { text: 'DESCRIPCION', datafield: 'descripcion', columntype: 'textbox', filtertype: 'textbox',

    cellsalign: 'right', align: 'right', width: "16%" },

    { text: 'FECHA DE SERVICIO', datafield: 'fecha_servicio', columntype: 'datetimeinput',

    filtertype: 'date', cellsalign: 'right', cellsformat: 'dd/MM/yyyy', width: "10%" },

    { text: 'COSTO', datafield: 'costo', columntype: 'textbox', filtertype: 'textbox', cellsalign:

    'right', width: "5%" },

    { text: 'idvehiculo', datafield: 'idvehiculo', align: 'right', cellsalign: 'right', width: "8%",

    hidden: true },

    { text: 'VEHICULO', datafield: 'vehiculo', columntype: 'textbox', filtertype: 'textbox',

    cellsalign: 'right', align: 'right', width: "30%"},

    { text: 'idproveedor', datafield: 'idproveedor', cellsalign: 'right', width: "8%", hidden: true },

    { text: 'PROVEEDOR', datafield: 'proveedor', columntype: 'textbox', filtertype: 'textbox',

    cellsalign: 'right', align: 'right', width: "30%"},

    { text: 'NO_FACTURA', datafield: 'nofactura', columntype: 'textbox', filtertype: 'textbox',cellsalign: 'right', width: "8%" },

    { text: 'EDITAR', datafield: 'Editar', columntype: 'button', width: "8%", cellsrenderer:

    function () {

    return "Editar";

    }, buttonclick: function (fila) {

    // Cuando el usuario de click en el botón de editar, se pasaran los datos del registroseleccionado a la ventana emergente, para que puedan ser modificados, para lograr esto se

    debe primero inicializar los campos y luego validar que se envíen de la siguiente forma:

    editrow = fila;

    var offset = $("#jqxgrid").offset();

  • 8/18/2019 CRUD de Servicios Demo

    20/24

    $("#popupWindow").jqxWindow({ position: { x: parseInt(offset.left) + 100, y:

     parseInt(offset.top) + 100 } });

    var dataRecord = $("#jqxgrid").jqxGrid('getrowdata', editrow);

    // ID del servicio

    $("#idservicio").val(dataRecord.idservicio); 

    //Catálogo de tipo de servicio

    if ($("#tipo").jqxDropDownList('getItemByValue', dataRecord.tipo))

    $("#tipo").jqxDropDownList('selectItem',dataRecord.tipo);

    else

    $("#tipo").jqxDropDownList('selectItem',"OTRO");

    // Descripción de servicio

    $("#descripcion").val(dataRecord.descripcion);

    //Fecha de servicio

    if (dataRecord.fecha_servicio=='0000-00-00'){

     parts =dataRecord.fecha_servicio.replace('/', '-').split('-');

    fecha = new Date(parts[0], parts[1]-1, parts[2]);

    $("#fecha_servicio").jqxDateTimeInput({ value: new Date(fecha) });

    }else

    $("#fecha_servicio").jqxDateTimeInput({ value: dataRecord.fecha_servicio });

    // Costo

    $("#costo").val(dataRecord.costo);

    $("#costo").jqxNumberInput({ decimal: dataRecord.costo });

    // Catalogo de vehículos

  • 8/18/2019 CRUD de Servicios Demo

    21/24

    if ($("#idvehiculo").jqxDropDownList('getItemByValue', dataRecord.idvehiculo))

    $("#idvehiculo").jqxDropDownList('selectItem',dataRecord.idvehiculo);

    else

    $("#idvehiculo").jqxDropDownList('selectItem',"OTRO");

    // Catalogo de mecanicos

    if ($("#idproveedor").jqxDropDownList('getItemByValue', dataRecord.idproveedor))

    $("#idproveedor").jqxDropDownList('selectItem',dataRecord.idproveedor);

    else

    $("#idproveedor").jqxDropDownList('selectItem',"OTRO");

    //Factura

    $("#nofactura").val(dataRecord.nofactura);

    // Muestra la ventana emergente

    $("#popupWindow").jqxWindow('open');

    }

    }, // Inicio del botón de bajas

    { text: 'BAJA', datafield: 'Baja', columntype: 'button', width: "8%", cellsrenderer: function

    () {

    return "Baja";

    }, buttonclick: function (fila) {

    // La función da de baja el registro al presionar el botón

    editrow = fila;

    var offset = $("#jqxgrid").offset();

    var dataRecord = $("#jqxgrid").jqxGrid('getrowdata', editrow);

  • 8/18/2019 CRUD de Servicios Demo

    22/24

    var reg = {

    idservicio : dataRecord.idservicio,

    actualizaEstatus : 'y'

    }

    if(reg.idservicio){

    $.ajax({

    async: false,

    url: 'servicio.class.php',

    type: 'POST',

    dataType: 'xml/html/script/json/jsonp',

    data: reg,

    complete: function(data, xhr, textStatus){

    daServicios.dataBind();

    },

    success: function(data, textStatus, xhr) {

    },

    error: function(xhr, textStatus, errorThrown) {}

    });

    }else{

    // Si el parámetro no se encuentra manda una advertencia, señalando que no se han

     proporcionado correctamente los datos y deben ser verificados. 

    alert("No se han proporcionado los datos completos, por favor verifíquelos");

    }

  • 8/18/2019 CRUD de Servicios Demo

    23/24

    }

    }

    ]

    });

    // Exportar el contenido de la tabla.

    $("#excelExport").jqxButton();

    // Función para ocultar las columnas de los botones de editar y baja del grid

    function ocultar(){

    $("#jqxgrid").jqxGrid('hidecolumn', 'Editar');

    $("#jqxgrid").jqxGrid('hidecolumn', 'Baja');

    }

    // Función para mostrar las columnas de los botones de editar y baja del grid

    function mostrar(){

    $("#jqxgrid").jqxGrid('showcolumn', 'Editar');

    $("#jqxgrid").jqxGrid('showcolumn', 'Baja');

    }

    //Función que permite exportar el contenido del grid a un archivo de Excel.

    function exportar(){

    $("#jqxgrid").delay(1000).jqxGrid('exportdata', 'xls', 'Servicio');

    }

    // Función que se ejecuta al momento de dar click en el botón de exportar a Excel en el

    index.php

    $("#excelExport").click(function () {

  • 8/18/2019 CRUD de Servicios Demo

    24/24

    ocultar();

    exportar();

    mostrar();

    });

    });