Advertisement
Guest User

Untitled

a guest
Mar 31st, 2015
187
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. //(function(window, $) {
  2.     /*
  3.     * :::: CONTAINERS :::: START
  4.     */
  5.     var $containerPago = $("#form-pagos");
  6.     var $table = $containerPago.find("#table-pagos");
  7.     var $_rowTpl = $("#row-template");
  8.  
  9.     var $modalPago = $("#modal-pago");
  10.     var $modalPrompt = $("#modal-prompt");
  11.     var _MODO102 = false;
  12.     /*
  13.     * :::: CONTAINERS ::::  / END
  14.     */
  15.    
  16.     /*
  17.     * :::: ELEMENTOS CRUCIALES (mas que todo, form-controls) :::: START
  18.     */
  19.  
  20.     var _mediosPago = {};
  21.     var _mediosPagoArray = [];
  22.     var _registros = [];
  23.     var _registrosIniciales = 0;
  24.     var _currentEditId = -1;
  25.     var _currMax = Infinity;
  26.     var _autoMax = false;
  27.  
  28.     var _FLAGS = {
  29.         editado: 'M',
  30.         original: 'P',
  31.         eliminado: 'E',
  32.         nuevo: 'N'
  33.     };
  34.  
  35.     var $tipoPago = $containerPago.find('#tipo');
  36.     var $maxPago = $containerPago.find('#max');
  37.     var $retencionRecibo = $containerPago.find('#monto_retencion_recibo');
  38.     var $netoPago = $containerPago.find('#neto_nc');
  39.     var $retencion10 = $containerPago.find('#monto_retencion_10');
  40.     var $retencion8 = $containerPago.find('#monto_retencion_8');
  41.     var $anioRecibo = $containerPago.find('#anio_recibo');
  42.     var $pago_ret01 = $containerPago.find('#pago_ret01');
  43.    
  44.     var $spanPorcentajeRetencion = $containerPago.find('#porcentaje_retencion_actual');
  45.    
  46.     var $btnValidarPagos = $containerPago.find("#validar-datos");
  47.     var $btnEnviarDatos = $containerPago.find("#enviar-datos");
  48.     var $btnSeleccionaPorcentaje = $containerPago.find("#seleccionar-porcentaje");
  49.  
  50.  
  51.     /* esto es lo que calcula el max en el modal*/
  52.     var _maxPagable = function(){
  53.         var maxStr = $maxPago.val();
  54.         /*
  55.         * :::: CASO 10X - Variacion de MAX en base a Retencion ::::
  56.         */
  57.         if(numberVal($retencionRecibo.val()) > 0){
  58.             /*
  59.             * :::: CASO 101 - 2015 en adelante ::::
  60.             */  
  61.             if(numberVal($anioRecibo.val()) >= 2015 && _registrosIniciales == 0){
  62.                 $spanPorcentajeRetencion.text('8.00');
  63.                 maxStr = $retencion8.val();
  64.             }
  65.             /*
  66.             * :::: CASO 101 - 2015 en adelante :::: END
  67.             */  
  68.             /*
  69.             * :::: CASO 102 - 2014 pa atras ::::
  70.             */  
  71.             if(numberVal($anioRecibo.val()) < 2015 && _registrosIniciales == 0){
  72.                 console.log('no valido max en modal')
  73.                 return Infinity;
  74.             }
  75.             /*
  76.             * :::: CASO 102 - 2015 pa atras :::: END
  77.             */  
  78.         }
  79.         /*
  80.         * :::: CASO 10X - Variacion de MAX en base a Retencion ::::  / END
  81.         */
  82.  
  83.         var max = numberVal(maxStr) || 0;
  84.         var neto = numberVal($netoPago.val()) || 0;
  85.         var total = max-neto + Number.MIN_VALUE;
  86.         return total;
  87.     };
  88.  
  89.     var $medioPago = $modalPago.find("#selMediopago");
  90.     var $montoPago = $modalPago.find("#txtMontopagado");
  91.     var $fechaPago = $modalPago.find("#txtFecpag");
  92.     var $numPago = $modalPago.find("#numPago");
  93.     var $idPago = $modalPago.find("#idPago");
  94.    
  95.     /*
  96.     * :::: ELEMENTOS CRUCIALES (mas que todo, form-controls) :::: / END
  97.     */
  98.  
  99.     /*
  100.     * :::: FUNCIONES :::: START
  101.     */
  102.  
  103.     var renderTabla = function(data, $table){
  104.         var $tbody = $table.find('tbody');
  105.         $tbody.empty();
  106.         _.each(data, function (e) {
  107.             var row = _.clone(e);
  108.             if(row.estado == _FLAGS.eliminado)
  109.                 return;
  110.  
  111.             var template = _.template($_rowTpl.html());
  112.             row["mediosPago"] = _mediosPago;
  113.             row["mto_pag_neto"] = $.number(row["mto_pag_neto"], 2);
  114.             $tbody.append(template(row));
  115.         });
  116.         $table.data('footable').redraw();
  117.     }
  118.  
  119.     var popularSelect = function(data, $element){
  120.         $element.empty();
  121.         $element.append($('<option/>').text('Seleccione...'));
  122.        
  123.         _.each(data, function (row) {
  124.             $element.append($('<option/>').val(row.codigo).text(row.descripcion));
  125.         })
  126.     }
  127.  
  128.     function buscarPago (id) {
  129.         return _.find(_registros, function (e) {
  130.             return e._id == id
  131.         });
  132.     }
  133.     function eliminarPago (id) {
  134.         for(var i in _registros)
  135.             if(_registros[i]._id == id){
  136.                 _registros[i].estado = _FLAGS.eliminado;
  137.             }
  138.     }
  139.  
  140.     function agregarPago (row) {
  141.         var obj = {}
  142.         // mapeo a mano
  143.         obj.cod_mediopago = row.selMediopago;
  144.         obj.mto_pag_neto = row.txtMontopagado;
  145.         obj.fec_pago = row.txtFecpag;
  146.         obj.num_pago = row.numPago;
  147.         obj._id = _.uniqueId();
  148.         obj.estado = _FLAGS.nuevo;
  149.         _registros.push(obj);  
  150.     }
  151.  
  152.     function editarPago (row) {
  153.         for(var i in _registros){
  154.             var obj = _registros[i];
  155.             if(obj._id == row.idPago){
  156.                 obj.cod_mediopago = row.selMediopago;
  157.                 obj.mto_pag_neto = row.txtMontopagado;
  158.                 obj.fec_pago = row.txtFecpag;
  159.                 obj.num_pago = row.numPago;
  160.                 obj.estado = !row.numPago ? _FLAGS.nuevo : _FLAGS.editado;
  161.             }
  162.         }
  163.     }
  164.  
  165.     function validarPago (row) {
  166.         return true;
  167.     }
  168.  
  169.     function inyectar_data_form ($form, data) {
  170.         for(var i in data){
  171.             var row = data[i];
  172.             for(var col in row) {
  173.                 var name = +['registros[',i,'][',col,']'].join('');
  174.                 $('<input/>', {type: 'hidden', name: name}).val(row[col]).appendTo($form);
  175.             }
  176.         }
  177.     }
  178.  
  179.     function calcularMaximoDisponible () {
  180.         var registros_validos = _.filter(_registros, function ( e ) {
  181.             return e.estado != _FLAGS.eliminado && e._id != _currentEditId;
  182.         });
  183.  
  184.         var total_registros = 0;
  185.         if(registros_validos.length > 0)
  186.             _.each(registros_validos, function(curr){
  187.                 total_registros += numberVal(curr.mto_pag_neto) || 0;
  188.             })
  189.  
  190.         return _maxPagable() - total_registros;
  191.     }
  192.  
  193.     function validacionManualPagos () {
  194.         var total = _.chain(_registros).map(function ( e ) {
  195.             return numberVal(e.mto_pag_neto);
  196.         }).reduce(function (curr, next) {
  197.             return curr+next;
  198.         }, 0).value();
  199.  
  200.         if(total > _currMax){
  201.             alert('Monto maximo excedido');
  202.         }else{
  203.             $btnEnviarDatos.removeClass('hidden');
  204.         }
  205.     }
  206.  
  207.  
  208.     /*
  209.     * :::: FUNCIONES :::: / END
  210.     */
  211.  
  212.     /*
  213.     * :::: HANDLERS :::: START
  214.     */
  215.  
  216.     $containerPago.find('.crear-pago').on('click', function (e) {
  217.         // tipoPago = cuarta, caso restrictivo
  218.         var registrosValidos = _.filter(_registros, function (e) {
  219.             return e.estado != _FLAGS.eliminado
  220.         }).length;
  221.  
  222.         if($tipoPago.val() == '03' &&  registrosValidos > 0){
  223.             alert("Solo se permite UN REGISTRO");
  224.             return;
  225.         }
  226.  
  227.         $modalPago.find('.operacion').text('Registrar');
  228.         $modalPago.find('.modal-info-registro').removeClass('hidden');
  229.         $medioPago.val('');
  230.         $montoPago.val('');
  231.         $fechaPago.val('');
  232.         $numPago.val('');
  233.         $modalPago.modal('show');
  234.         if(_MODO102)
  235.             $btnEnviarDatos.addClass('hidden');
  236.     });
  237.  
  238.     $containerPago.on('click', '.editar-pago', function (e) {
  239.         var $closest = $(e.target).closest('.editar-pago');
  240.        
  241.         if($closest.hasClass('hidden'))
  242.             return;
  243.  
  244.         var id = $closest.data('target-id');
  245.         $modalPago.find('.operacion').text('Editar');
  246.         $modalPago.find('.modal-info-registro').addClass('hidden');
  247.         var row = buscarPago(id);
  248.        
  249.         $medioPago.val(row.cod_mediopago);
  250.         $montoPago.val(row.mto_pag_neto);
  251.         $fechaPago.val(row.fec_pago);
  252.         $numPago.val(row.num_pago);
  253.         $idPago.val(id);
  254.         _currentEditId = id;
  255.  
  256.         $modalPago.modal('show');
  257.         if(_MODO102)
  258.             $btnEnviarDatos.addClass('hidden');
  259.     });
  260.  
  261.     $containerPago.on('click', '.eliminar-pago', function (e) {
  262.         var id = $(e.target).closest('.eliminar-pago').data('target-id');
  263.         eliminarPago(id);
  264.         renderTabla(_registros, $table);
  265.         if(_MODO102)
  266.             $btnEnviarDatos.addClass('hidden');
  267.     });
  268.  
  269.     $fechaPago.on('click', function (e) {
  270.         $fechaPago.data('datepicker').show();
  271.     });
  272.  
  273.     /*
  274.     * :::: CASO 10X - Variacion de MAX en base a Retencion ::::
  275.     */
  276.  
  277.     $btnValidarPagos.on('click', function (e) {
  278.  
  279.         if(_registros.length == 0){
  280.             alert('Por favor, registre un pago antes de validar.');
  281.             return;
  282.         }
  283.  
  284.         // Fecha esta guardado en formato dd/mm/yyyy
  285.         // aprovechare la conveniencia y cortare la parte del yyyy para comparar.
  286.         // (substr(6, 4))
  287.         $btnEnviarDatos.addClass('hidden');
  288.  
  289.         var tiene2014 = _.chain(_registros).filter(function (e) {
  290.             return e.estado != _FLAGS.eliminado  
  291.         }).map(function (e) {
  292.             return e.fec_pago.substr(6,4)
  293.         }).contains('2014').value();
  294.  
  295.         if(tiene2014){
  296.             _currMax = numberVal($retencion8.val());
  297.             $spanPorcentajeRetencion.text('8.00');
  298.             _autoMax = true;
  299.             $modalPrompt.modal('hide');
  300.         }else{
  301.             _autoMax = false;
  302.             $modalPrompt.modal('show');
  303.         }
  304.     });
  305.  
  306.     $modalPrompt.find('form').on('submit', function (e) {
  307.         e.preventDefault();
  308.         var data = $(e.target).serializeObject();
  309.  
  310.         if(data.tipoRetencion == "8"){
  311.             _currMax = numberVal($retencion8.val());
  312.             $spanPorcentajeRetencion.text('8.00');
  313.         }else{
  314.             _currMax = numberVal($retencion10.val());
  315.             $spanPorcentajeRetencion.text('10.00');
  316.         }
  317.         $modalPrompt.modal('hide');
  318.     })
  319.  
  320.     $modalPrompt.on('hidden.bs.modal', function (e) {
  321.         if(!_autoMax)
  322.             validacionManualPagos();
  323.     });
  324.     /*
  325.     * :::: CASO 10X - Variacion de MAX en base a Retencion :::: / END
  326.     */
  327.  
  328.     $btnEnviarDatos.on('click', function (e) {
  329.        
  330.         var url = 'regpagorhe.do?action=capturaCriterioPagoParcialRecibo3';
  331.         $.ajax({
  332.             url: url,
  333.             method: 'post',
  334.             dataType: 'json',
  335.             data: {
  336.                 registros: JSON.stringify(_registros)
  337.             },
  338.             success: function () {
  339.                 // body...
  340.                 //alert('redirecting');
  341.                 window.location.href= 'regpagorhe.do?action=capturaCriterioPagoParcialRecibo4';
  342.  
  343.             },
  344.             error: function () {
  345.                 // body...
  346.                 alert('e');
  347.                 window.location.href= 'regpagorhe.do?action=capturaCriterioPagoParcialRecibo4';
  348.             }
  349.         });
  350.     });
  351.  
  352.  
  353.     /*
  354.     * :::: HANDLERS :::: / END
  355.     */
  356.  
  357.     /*
  358.     * :::: FORM VALIDATE :::: START
  359.     */
  360.  
  361.     function preparePagos (data) {
  362.         _registrosIniciales = data.registros.length;
  363.         _.each(data.registros, function(row){
  364.             row["_id"] = _.uniqueId();
  365.             row["estado"] = _FLAGS.original;
  366.         })
  367.        
  368.         _registros = data.registros;
  369.                
  370.         $table.footable();
  371.         renderTabla(data.registros, $table);
  372.     }
  373.  
  374.     $.ajax({
  375.         url: '/a/json/medios-de-pago.json',
  376.         success: function(data) {
  377.             _mediosPagoArray = data;
  378.             _.each(_mediosPagoArray, function (medio) {
  379.                 _mediosPago[medio.codigo] = medio.descripcion;
  380.                
  381.             })
  382.             popularSelect(data, $medioPago);
  383.         },
  384.         method: 'post'
  385.     })
  386.  
  387.     $modalPago.find('form').validate(_.extend(window._validatorWallSettings, {
  388.         rules: {
  389.             selMediopago: {
  390.                 required: true,
  391.                 min: 0 + Number.MIN_VALUE
  392.             },
  393.             txtMontopagado: {
  394.                 required: true,
  395.                 number: true,
  396.                 min: 0 + Number.MIN_VALUE,
  397.                 max: {
  398.                     param: calcularMaximoDisponible
  399.                 },
  400.                 equal: {
  401.                     depends: function () {
  402.                         return $tipoPago.val() == '03';
  403.                     },
  404.                     param: calcularMaximoDisponible
  405.                 }
  406.             },
  407.             txtFecpag: {
  408.                 required: true
  409.             }
  410.         },
  411.         messages :{
  412.             txtMontopagado: {
  413.                 max: function () {
  414.                     return "el monto no puede superar " + $.number(calcularMaximoDisponible(), 2);
  415.                 },
  416.                 equal: function () {
  417.                     return "el monto debe ser igual a " + $.number(calcularMaximoDisponible(), 2);
  418.                 }
  419.             }
  420.         },
  421.         debug: true,
  422.         submitHandler: function (form) {
  423.             var $form = $(form)
  424.             var formData = $form.serializeObject();
  425.             var result = validarPago(formData);
  426.  
  427.             if(result == true){
  428.                 if($form.find('.operacion').text() == 'Editar'){
  429.                     editarPago(formData);
  430.                     _currentEditId = -1;
  431.                 }
  432.                 else
  433.                     agregarPago(formData);
  434.  
  435.                 if(_MODO102 && formData.txtFecpag.substr(6,4) == '2014'){
  436.                     $spanPorcentajeRetencion.text('10.00');
  437.                 }
  438.  
  439.                 renderTabla(_registros, $table);
  440.                 $modalPago.modal('hide');
  441.             }
  442.         }
  443.     }));
  444.  
  445.     /*
  446.     * :::: FORM VALIDATE :::: END
  447.     */
  448.  
  449.     /*
  450.     * :::: SETUP :::: START
  451.     */
  452.  
  453.  
  454.     $fechaPago.datepicker({
  455.         appendTo: $modalPago.find('.modal-body')
  456.     });
  457.    
  458.     $(".number").number(true, 2);
  459.  
  460.  
  461.     var url = 'regpagorhe.do?action=getListaPagos';
  462.     $.ajax({
  463.         url: url,
  464.         success: function(data) {
  465.             preparePagos(data);
  466.         },
  467.         method: 'post',
  468.         dataType: 'json'
  469.     });
  470.  
  471.     $btnValidarPagos.addClass('hidden');
  472.  
  473.     if(
  474.         _registrosIniciales == 0
  475.         && numberVal($retencionRecibo.val()) > 0
  476.         && numberVal($anioRecibo.val()) == 2014
  477.     ){
  478.         _MODO102 = true;
  479.         $btnValidarPagos.removeClass('hidden');
  480.         $btnEnviarDatos.addClass('hidden');
  481.         $btnSeleccionaPorcentaje.addClass('hidden');
  482.     }
  483.  
  484.     $spanPorcentajeRetencion.text('0.00');
  485.     /*
  486.     * :::: SETUP :::: / END
  487.     */
  488.  
  489.  
  490. //})(window, jQuery)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement