예제 #1
0
    function dataedit($cliente = '', $status = '', $id = '')
    {
        $this->datasis->modulo_id(143, 1);
        if (!$this->_exitescli($cliente)) {
            redirect($this->url . 'filterscli');
        }
        $this->db->select_sum('a.monto*IF(tipo_doc IN ("FC","ND","GI"),1,-1)', 'saldo');
        $this->db->from('smov AS a');
        $this->db->where('a.cod_cli', $cliente);
        $q = $this->db->get();
        $row = $q->row_array();
        $saldo = empty($row['saldo']) ? 0 : $row['saldo'];
        $this->rapyd->load('dataobject', 'datadetails');
        $this->load->helper('form');
        $vd = $this->secu->getvendedor();
        $dbvd = $this->db->escape($vd);
        $do = new DataObject('pfac');
        $do->rel_one_to_many('itpfac', 'itpfac', array('numero' => 'numa'));
        $do->pointer('scli', 'scli.cliente=pfac.cod_cli', 'scli.tipo AS sclitipo', 'left');
        $do->rel_pointer('itpfac', 'sinv', 'itpfac.codigoa=sinv.codigo', '
			sinv.iva AS sinviva,
			sinv.existen AS pexisten,
			sinv.marca AS pmarca,
			sinv.descrip AS pdesca,
			sinv.peso AS ppeso');
        $do->order_by('itpfac', 'sinv.marca', ' ');
        $do->order_by('itpfac', 'sinv.descrip', ' ');
        $edit = new DataDetails('Pedidos', $do);
        $edit->back_url = site_url('ventas/pfaclite/filteredgrid');
        $edit->set_rel_title('itpfac', 'Producto <#o#>');
        $edit->pre_process('insert', '_pre_insert');
        $edit->pre_process('update', '_pre_update');
        $edit->pre_process('delete', '_pre_delete');
        $edit->post_process('insert', '_post_insert');
        $edit->post_process('update', '_post_update');
        $edit->post_process('delete', '_post_delete');
        $fenvia = strtotime($edit->get_from_dataobjetct('fenvia'));
        $faplica = strtotime($edit->get_from_dataobjetct('faplica'));
        $hoy = strtotime(date('Y-m-d'));
        $edit->fecha = new inputField('Fecha', 'fecha');
        $edit->fecha->insertValue = date('Y-m-d');
        $edit->fecha->mode = 'autohide';
        $edit->fecha->size = 10;
        $edit->mmargen = new inputField('mmargen', 'mmargen');
        $edit->numero = new inputField('N&uacute;mero', 'numero');
        $edit->numero->size = 10;
        $edit->numero->mode = 'autohide';
        $edit->numero->maxlength = 8;
        $edit->numero->apply_rules = false;
        //necesario cuando el campo es clave y no se pide al usuario
        $edit->numero->when = array('show', 'modify');
        $edit->cliente = new hiddenField('Cliente', 'cod_cli');
        $edit->cliente->insertValue = $cliente;
        $edit->cliente->rule = 'required';
        $dbcliente = $this->db->escape($cliente);
        $nombre = $this->datasis->dameval("SELECT nombre FROM scli WHERE cliente={$dbcliente}");
        $edit->nombre = new freeField('Nombre', 'nombre', $nombre);
        $edit->observa = new inputField('Observaciones', 'observa');
        $edit->observa->size = 40;
        // Campos para el detalle
        $edit->codigoa = new inputField('C&oacute;digo <#o#>', 'codigoa_<#i#>');
        $edit->codigoa->size = 12;
        $edit->codigoa->db_name = 'codigoa';
        $edit->codigoa->rel_id = 'itpfac';
        $edit->codigoa->rule = 'callback_chcodigoa';
        $edit->codigoa->type = 'inputhidden';
        $edit->pdesca = new inputField('Descripci&oacute;n <#o#>', 'pdesca_<#i#>');
        $edit->pdesca->size = 32;
        $edit->pdesca->db_name = 'desca';
        $edit->pdesca->maxlength = 50;
        $edit->pdesca->readonly = true;
        $edit->pdesca->rel_id = 'itpfac';
        $edit->pdesca->type = 'inputhidden';
        $edit->pdesca->pointer = true;
        $edit->itdesca = new hiddenField('descrip', 'itdesca_<#i#>');
        $edit->itdesca->insertValue = '';
        $edit->itdesca->db_name = 'desca';
        $edit->itdesca->rel_id = 'itpfac';
        $edit->pexisten = new inputField('Existencia <#o#>', 'pexisten_<#i#>');
        $edit->pexisten->size = 10;
        $edit->pexisten->db_name = 'pexisten';
        $edit->pexisten->rel_id = 'itpfac';
        $edit->pexisten->type = 'inputhidden';
        $edit->pexisten->pointer = true;
        $edit->cana = new inputField('Cantidad <#o#>', 'cana_<#i#>');
        $edit->cana->db_name = 'cana';
        $edit->cana->css_class = 'inputnum';
        $edit->cana->rel_id = 'itpfac';
        $edit->cana->maxlength = 10;
        $edit->cana->size = 4;
        $edit->cana->rule = 'positive|callback_chcana[<#i#>]';
        $edit->cana->autocomplete = false;
        $edit->cana->onkeyup = 'total(\'<#i#>\')';
        $edit->cana->style = "height: 30px; font-size: 18px;";
        $edit->preca = new dropdownField('Precio <#o#>', 'preca_<#i#>');
        $edit->preca->db_name = 'preca';
        $edit->preca->css_class = 'inputnum';
        $edit->preca->rel_id = 'itpfac';
        $edit->preca->rule = 'positive|callback_chpreca[<#i#>]';
        $edit->itiva = new hiddenField('', 'itiva_<#i#>');
        $edit->itiva->db_name = 'iva';
        $edit->itiva->rel_id = 'itpfac';
        $edit->pmarca = new inputField('', 'pmarca_<#i#>');
        $edit->pmarca->db_name = 'pmarca';
        $edit->pmarca->rel_id = 'itpfac';
        $edit->pmarca->pointer = true;
        // fin de campos para detalle
        $edit->totalg = new hiddenField('Monto Total', 'totalg');
        $edit->totalg->css_class = 'inputnum';
        $edit->totalg->readonly = true;
        $edit->totalg->size = 10;
        $edit->iva = new hiddenField('Impuesto', 'iva');
        $edit->iva->css_class = 'inputnum';
        $edit->iva->readonly = true;
        $edit->iva->size = 10;
        $edit->usuario = new autoUpdateField('usuario', $this->session->userdata('usuario'), $this->session->userdata('usuario'));
        $edit->estampa = new autoUpdateField('estampa', date('Ymd'), date('Ymd'));
        $edit->hora = new autoUpdateField('hora', date('H:i:s'), date('H:i:s'));
        $control = $this->rapyd->uri->get_edited_id();
        if ($edit->getstatus() == 'show') {
            $action = "javascript:window.location='" . site_url($this->url . 'filterscli') . "'";
            $edit->button('btn_add', 'Incluir nuevo pedido', $action, 'TR');
        }
        $iusr = $edit->get_from_dataobjetct('usuario');
        if ($fenvia < $hoy && $iusr == $this->secu->usuario()) {
            $edit->buttons('modify', 'save', 'delete', 'undo', 'back', 'add_rel');
            $PFACRESERVA = $this->datasis->traevalor('PFACRESERVA', 'indica si un pedido descuenta de inventario los producto');
            if ($PFACRESERVA == 'S') {
                $accion = "javascript:window.location='" . site_url('ventas/pfaclite/reserva/' . $control) . "/pfaclite'";
                $edit->button_status('btn_envia', 'Enviar Pedido', $accion, 'TR', 'show');
            }
        } else {
            $edit->buttons('save', 'undo', 'back', 'add_rel');
        }
        //$edit->button_status('btn_load','Subir desde Excel',$accion,'TL','show');
        //$edit->button_status('btn_load','Subir desde Excel',$accion,'TL','create');
        //$edit->button_status('btn_load','Subir desde Excel',$accion,'TL','modify');
        $alma = $this->secu->getalmacen();
        $dbalma = $this->db->escape($alma);
        $tiposcli = $this->datasis->dameval("SELECT tipo FROM scli WHERE cliente={$dbcliente}");
        if ($tiposcli < 1) {
            $tiposcli = 1;
        } elseif ($tiposcli > 4) {
            $tiposcli = 4;
        }
        $sel = array('TRIM(a.codigo) AS codigo', 'a.descrip', 'a.precio1', 'a.precio2', 'a.precio3', 'a.precio4', 'a.exdes', 'a.marca', 'b.existen', 'a.iva', 'a.peso');
        $this->db->from('sinv AS a');
        $this->db->where('a.activo', 'S');
        $this->db->where('a.tipo', 'Articulo');
        $this->db->group_by('a.codigo');
        $this->db->order_by('a.marca , a.descrip , a.peso');
        $this->db->limit($this->limit);
        $act_meta = false;
        if ($status == 'create' || $status == 'insert') {
            $this->db->join('itsinv AS b', 'a.codigo=b.codigo AND b.alma=' . $dbalma);
            $this->db->where('b.existen > 0');
            if ($this->db->table_exists('metas')) {
                $pmargen = $this->datasis->dameval('SELECT pmargen FROM vend WHERE vendedor=' . $dbvd);
                if (empty($pmargen)) {
                    $pmargen = 0;
                } else {
                    $pmargen = $pmargen / 100;
                }
                $mmes = date('Ym');
                $uday = days_in_month(substr($mmes, 4), substr($mmes, 0, 4));
                $this->db->join('metas  AS c', 'a.codigo=c.codigo AND c.fecha=' . $mmes, 'left');
                $this->db->join('sitems AS d', 'd.codigoa=c.codigo AND vendedor=' . $dbvd . ' AND d.fecha BETWEEN ' . $mmes . '01 AND ' . $mmes . $uday, 'left');
                $sel[] = "COALESCE(c.cantidad,0)*{$pmargen} AS meta";
                $sel[] = 'COALESCE(SUM(d.cana*IF(tipoa=\'D\',-1,1)),0) AS vendido';
                $act_meta = true;
            }
        } elseif ($status == 'show') {
            $this->db->join('itsinv AS b', 'a.codigo=b.codigo');
        } else {
            $this->db->where('b.existen > 0');
            $this->db->join('itsinv AS b', 'a.codigo=b.codigo AND b.alma=' . $dbalma);
        }
        $this->db->select($sel);
        $sinv = $this->db->get();
        $sinv = $sinv->result_array();
        $sinv_arr = array();
        foreach ($sinv as $k => $v) {
            $sinv_arr[$v['codigo']] = array('descrip' => $v['descrip'], 'precio1' => $v['precio1'] * 100 / (100 + $v['iva']), 'precio2' => $v['precio2'] * 100 / (100 + $v['iva']), 'precio3' => $v['precio3'] * 100 / (100 + $v['iva']), 'precio4' => $v['precio4'] * 100 / (100 + $v['iva']), 'marca' => $v['marca'], 'existen' => $v['existen'], 'iva' => $v['iva'], 'peso' => $v['peso'], 'codigo' => $v['codigo'], 'exdes' => $v['exdes']);
            if ($act_meta) {
                $sinv_arr[$v['codigo']]['meta'] = $v['meta'];
                $sinv_arr[$v['codigo']]['vendido'] = $v['vendido'];
            }
        }
        $pedido = array();
        if ($status == 'create' || $status == 'insert' || $status == 'modify' || $status == 'update') {
            $vds = array();
            $mmSQL = "SELECT TRIM(vendedor) AS vd FROM usuario WHERE almacen={$dbalma}";
            $qquery = $this->db->query($mmSQL);
            foreach ($qquery->result() as $rrow) {
                $vds[] = $this->db->escape($rrow->vd);
            }
            $vds = implode(',', $vds);
            $mmSQL = "SELECT TRIM(a.codigoa) AS codigo,SUM(a.cana) AS cana\n\t\t\t\tFROM itpfac AS a\n\t\t\t\tJOIN pfac AS b ON b.numero=a.numa\n\t\t\tWHERE b.status='P' AND b.vd IN ({$vds})\n\t\t\tGROUP BY a.codigoa";
            $qquery = $this->db->query($mmSQL);
            foreach ($qquery->result() as $rrow) {
                $pedido[$rrow->codigo] = $rrow->cana;
            }
        }
        if ($edit->getstatus() == 'update') {
            $pfacnum = $edit->get_from_dataobjetct('numero');
            $dbpfacnum = $this->db->escape($pfacnum);
            $mmSQL = "SELECT TRIM(a.codigoa) AS codigo,SUM(a.cana) AS cana\n\t\t\t\tFROM itpfac AS a\n\t\t\tWHERE a.numa={$dbpfacnum}\n\t\t\tGROUP BY a.codigoa";
            $qquery = $this->db->query($mmSQL);
            foreach ($qquery->result() as $rrow) {
                $lleva[$rrow->codigo] = floatval($rrow->cana);
            }
        } else {
            $lleva = array();
        }
        if ($this->genesal) {
            $edit->build();
            $conten['lleva'] = $lleva;
            $conten['status'] = $status;
            $conten['pedido'] = $pedido;
            $conten['saldo'] = $saldo;
            $conten['act_meta'] = $act_meta;
            $conten['tiposcli'] = $tiposcli;
            $conten['form'] =& $edit;
            $conten['sinv'] = $sinv_arr;
            $data['content'] = $this->load->view('view_pfaclite', $conten, true);
            $data['head'] = style('mayor/estilo.css');
            //$data['title']     = heading('Pedidos No. '.$edit->numero->value);
            $data['title'] = heading('Pedidos ligeros');
            $this->load->view('view_ventanas_lite', $data);
        } else {
            $edit->on_save_redirect = false;
            $edit->build();
            if ($edit->on_success()) {
                $numero = $edit->_dataobject->get('numero');
                $rt = 'Pedido del cliente ' . $edit->cliente->value . ' - ' . $edit->nombre->value . ' ha sido guardado bajo el n&uacute;mero ' . $numero . '.';
            } elseif ($edit->on_error()) {
                $rt = html_entity_decode(preg_replace('/<[^>]*>/', '', $edit->error_string));
            } else {
                $rt = '';
            }
            return $rt;
        }
    }