protected function process()
 {
     $this->show_fs_toolbar = FALSE;
     $this->cliente = FALSE;
     $this->pedido = FALSE;
     $this->presupuesto = FALSE;
     if (isset($_REQUEST['pedido']) and isset($_REQUEST['id'])) {
         $ped = new pedido_cliente();
         $this->pedido = $ped->get($_REQUEST['id']);
         if ($this->pedido) {
             $cliente = new cliente();
             $this->cliente = $cliente->get($this->pedido->codcliente);
         }
         if (isset($_POST['email'])) {
             $this->enviar_email('pedio');
         } else {
             $this->generar_pdf_pedido();
         }
     } else {
         if (isset($_REQUEST['presupuesto']) and isset($_REQUEST['id'])) {
             $pres = new presupuesto_cliente();
             $this->presupuesto = $pres->get($_REQUEST['id']);
             if ($this->presupuesto) {
                 $cliente = new cliente();
                 $this->cliente = $cliente->get($this->presupuesto->codcliente);
             }
             if (isset($_POST['email'])) {
                 $this->enviar_email('presupuesto');
             } else {
                 $this->generar_pdf_presupuesto();
             }
         }
     }
     $this->share_extensions();
 }
Ejemplo n.º 2
0
 public function __construct(&$db)
 {
     $pre = new presupuesto_cliente();
     $pre->cron_job();
     $ped = new pedido_cliente();
     $ped->cron_job();
     $pedp = new pedido_proveedor();
     $pedp->cron_job();
 }
 protected function private_core()
 {
     $this->articulo_proveedor = new articulo_proveedor();
     $this->cliente = FALSE;
     $this->impuesto = new impuesto();
     $this->pedido = FALSE;
     $this->presupuesto = FALSE;
     $this->proveedor = FALSE;
     /// obtenemos los datos de configuración de impresión
     $this->impresion = array('print_ref' => '1', 'print_dto' => '1', 'print_alb' => '0');
     $fsvar = new fs_var();
     $this->impresion = $fsvar->array_get($this->impresion, FALSE);
     if (isset($_REQUEST['pedido_p']) and isset($_REQUEST['id'])) {
         $ped = new pedido_proveedor();
         $this->pedido = $ped->get($_REQUEST['id']);
         if ($this->pedido) {
             $proveedor = new proveedor();
             $this->proveedor = $proveedor->get($this->pedido->codproveedor);
         }
         if (isset($_POST['email'])) {
             $this->enviar_email_proveedor('pedio');
         } else {
             $this->generar_pdf_pedido_proveedor();
         }
     } else {
         if (isset($_REQUEST['pedido']) and isset($_REQUEST['id'])) {
             $ped = new pedido_cliente();
             $this->pedido = $ped->get($_REQUEST['id']);
             if ($this->pedido) {
                 $cliente = new cliente();
                 $this->cliente = $cliente->get($this->pedido->codcliente);
             }
             if (isset($_POST['email'])) {
                 $this->enviar_email('pedio');
             } else {
                 $this->generar_pdf_pedido();
             }
         } else {
             if (isset($_REQUEST['presupuesto']) and isset($_REQUEST['id'])) {
                 $pres = new presupuesto_cliente();
                 $this->presupuesto = $pres->get($_REQUEST['id']);
                 if ($this->presupuesto) {
                     $cliente = new cliente();
                     $this->cliente = $cliente->get($this->presupuesto->codcliente);
                 }
                 if (isset($_POST['email'])) {
                     $this->enviar_email('presupuesto');
                 } else {
                     $this->generar_pdf_presupuesto();
                 }
             }
         }
     }
     $this->share_extensions();
 }
Ejemplo n.º 4
0
 protected function private_core()
 {
     /// declaramos los objetos sólo para asegurarnos de que existen las tablas
     $presupuesto = new presupuesto_cliente();
     $pedido = new pedido_cliente();
     $this->mostrar = 'stats';
     if (isset($_REQUEST['mostrar'])) {
         $this->mostrar = $_REQUEST['mostrar'];
     }
     if ($this->mostrar == 'listado') {
         $this->desde = Date('1-m-Y');
         $this->hasta = Date('d-m-Y', mktime(0, 0, 0, date("m") + 1, date("1") - 1, date("Y")));
         if (isset($_POST['desde'])) {
             $this->desde = $_POST['desde'];
             $this->hasta = $_POST['hasta'];
         }
         $this->resultados = $presupuesto->all_desde($this->desde, $this->hasta);
     }
 }
 protected function process()
 {
     $presupuesto = new presupuesto_cliente();
     /// desactivamos la barra de botones
     $this->show_fs_toolbar = FALSE;
     $this->offset = 0;
     if (isset($_GET['offset'])) {
         $this->offset = intval($_GET['offset']);
     }
     if (isset($_POST['buscar_lineas'])) {
         $this->buscar_lineas();
     } else {
         if (isset($_GET['codagente'])) {
             $this->template = 'extension/ventas_presupuestos_agente';
             $agente = new agente();
             $this->agente = $agente->get($_GET['codagente']);
             $this->resultados = $presupuesto->all_from_agente($_GET['codagente'], $this->offset);
         } else {
             if (isset($_GET['codcliente'])) {
                 $this->template = 'extension/ventas_presupuestos_cliente';
                 $cliente = new cliente();
                 $this->cliente = $cliente->get($_GET['codcliente']);
                 $this->resultados = $presupuesto->all_from_cliente($_GET['codcliente'], $this->offset);
             } else {
                 if (isset($_GET['ref'])) {
                     $this->template = 'extension/ventas_presupuestos_articulo';
                     $articulo = new articulo();
                     $this->articulo = $articulo->get($_GET['ref']);
                     $linea = new linea_presupuesto_cliente();
                     $this->resultados = $linea->all_from_articulo($_GET['ref'], $this->offset);
                 } else {
                     $this->share_extension();
                     if (isset($_POST['delete'])) {
                         $this->delete_presupuesto();
                     }
                     if ($this->query) {
                         $this->resultados = $presupuesto->search($this->query, $this->offset);
                     } else {
                         if (isset($_GET['pendientes'])) {
                             $this->resultados = $presupuesto->all_ptepedir($this->offset);
                         } else {
                             $this->resultados = $presupuesto->all($this->offset);
                         }
                     }
                 }
             }
         }
     }
 }
Ejemplo n.º 6
0
 private function nuevo_presupuesto_cliente()
 {
     $continuar = TRUE;
     $cliente = $this->cliente->get($_POST['cliente']);
     if (!$cliente) {
         $this->new_error_msg('Cliente no encontrado.');
         $continuar = FALSE;
     }
     $almacen = $this->almacen->get($_POST['almacen']);
     if ($almacen) {
         $this->save_codalmacen($_POST['almacen']);
     } else {
         $this->new_error_msg('Almacén no encontrado.');
         $continuar = FALSE;
     }
     $eje0 = new ejercicio();
     $ejercicio = $eje0->get_by_fecha($_POST['fecha']);
     if (!$ejercicio) {
         $this->new_error_msg('Ejercicio no encontrado.');
         $continuar = FALSE;
     }
     $serie = $this->serie->get($_POST['serie']);
     if (!$serie) {
         $this->new_error_msg('Serie no encontrada.');
         $continuar = FALSE;
     }
     $forma_pago = $this->forma_pago->get($_POST['forma_pago']);
     if ($forma_pago) {
         $this->save_codpago($_POST['forma_pago']);
     } else {
         $this->new_error_msg('Forma de pago no encontrada.');
         $continuar = FALSE;
     }
     $divisa = $this->divisa->get($_POST['divisa']);
     if (!$divisa) {
         $this->new_error_msg('Divisa no encontrada.');
         $continuar = FALSE;
     }
     $presupuesto = new presupuesto_cliente();
     if ($this->duplicated_petition($_POST['petition_id'])) {
         $this->new_error_msg('Petición duplicada. Has hecho doble clic sobre el botón guardar
            y se han enviado dos peticiones. Mira en <a href="' . $presupuesto->url() . '">Presupuestos</a>
            para ver si el presupuesto se ha guardado correctamente.');
         $continuar = FALSE;
     }
     if ($continuar) {
         $presupuesto->fecha = $_POST['fecha'];
         $presupuesto->finoferta = date("Y-m-d", strtotime($_POST['fecha'] . " +1 month"));
         $presupuesto->codalmacen = $almacen->codalmacen;
         $presupuesto->codejercicio = $ejercicio->codejercicio;
         $presupuesto->codserie = $serie->codserie;
         $presupuesto->codpago = $forma_pago->codpago;
         $presupuesto->coddivisa = $divisa->coddivisa;
         $presupuesto->tasaconv = $divisa->tasaconv;
         if ($_POST['tasaconv'] != '') {
             $presupuesto->tasaconv = floatval($_POST['tasaconv']);
         }
         $presupuesto->codagente = $this->agente->codagente;
         $presupuesto->observaciones = $_POST['observaciones'];
         $presupuesto->numero2 = $_POST['numero2'];
         $presupuesto->irpf = $serie->irpf;
         $presupuesto->porcomision = $this->agente->porcomision;
         $presupuesto->codcliente = $cliente->codcliente;
         $presupuesto->cifnif = $cliente->cifnif;
         $presupuesto->nombrecliente = $cliente->razonsocial;
         $presupuesto->ciudad = $_POST['ciudad'];
         $presupuesto->codpais = $_POST['codpais'];
         $presupuesto->codpostal = $_POST['codpostal'];
         $presupuesto->direccion = $_POST['direccion'];
         $presupuesto->provincia = $_POST['provincia'];
         if ($presupuesto->save()) {
             $art0 = new articulo();
             $n = floatval($_POST['numlineas']);
             for ($i = 0; $i <= $n; $i++) {
                 if (isset($_POST['referencia_' . $i])) {
                     $linea = new linea_presupuesto_cliente();
                     $linea->idpresupuesto = $presupuesto->idpresupuesto;
                     $linea->descripcion = $_POST['desc_' . $i];
                     if (!$serie->siniva and $cliente->regimeniva != 'Exento') {
                         $imp0 = $this->impuesto->get_by_iva($_POST['iva_' . $i]);
                         if ($imp0) {
                             $linea->codimpuesto = $imp0->codimpuesto;
                             $linea->iva = floatval($_POST['iva_' . $i]);
                             $linea->recargo = floatval($_POST['recargo_' . $i]);
                         } else {
                             $linea->iva = floatval($_POST['iva_' . $i]);
                             $linea->recargo = floatval($_POST['recargo_' . $i]);
                         }
                     }
                     $linea->irpf = floatval($_POST['irpf_' . $i]);
                     $linea->pvpunitario = floatval($_POST['pvp_' . $i]);
                     $linea->cantidad = floatval($_POST['cantidad_' . $i]);
                     $linea->dtopor = floatval($_POST['dto_' . $i]);
                     $linea->pvpsindto = $linea->pvpunitario * $linea->cantidad;
                     $linea->pvptotal = floatval($_POST['neto_' . $i]);
                     $articulo = $art0->get($_POST['referencia_' . $i]);
                     if ($articulo) {
                         $linea->referencia = $articulo->referencia;
                     }
                     if ($linea->save()) {
                         $presupuesto->neto += $linea->pvptotal;
                         $presupuesto->totaliva += $linea->pvptotal * $linea->iva / 100;
                         $presupuesto->totalirpf += $linea->pvptotal * $linea->irpf / 100;
                         $presupuesto->totalrecargo += $linea->pvptotal * $linea->recargo / 100;
                     } else {
                         $this->new_error_msg("¡Imposible guardar la linea con referencia: " . $linea->referencia);
                         $continuar = FALSE;
                     }
                 }
             }
             if ($continuar) {
                 /// redondeamos
                 $presupuesto->neto = round($presupuesto->neto, FS_NF0);
                 $presupuesto->totaliva = round($presupuesto->totaliva, FS_NF0);
                 $presupuesto->totalirpf = round($presupuesto->totalirpf, FS_NF0);
                 $presupuesto->totalrecargo = round($presupuesto->totalrecargo, FS_NF0);
                 $presupuesto->total = $presupuesto->neto + $presupuesto->totaliva - $presupuesto->totalirpf + $presupuesto->totalrecargo;
                 if (abs(floatval($_POST['atotal']) - $presupuesto->total) >= 0.02) {
                     $this->new_error_msg("El total difiere entre el controlador y la vista (" . $presupuesto->total . " frente a " . $_POST['atotal'] . "). Debes informar del error.");
                     $presupuesto->delete();
                 } else {
                     if ($presupuesto->save()) {
                         $this->new_message("<a href='" . $presupuesto->url() . "'>" . ucfirst(FS_PRESUPUESTO) . "</a> guardado correctamente.");
                         $this->new_change(ucfirst(FS_PRESUPUESTO) . ' a Cliente ' . $presupuesto->codigo, $presupuesto->url(), TRUE);
                         if ($_POST['redir'] == 'TRUE') {
                             header('Location: ' . $presupuesto->url());
                         }
                     } else {
                         $this->new_error_msg("¡Imposible actualizar el <a href='" . $presupuesto->url() . "'>" . FS_PRESUPUESTO . "</a>!");
                     }
                 }
             } else {
                 if ($presupuesto->delete()) {
                     $this->new_message(ucfirst(FS_PRESUPUESTO) . " eliminado correctamente.");
                 } else {
                     $this->new_error_msg("¡Imposible eliminar el <a href='" . $presupuesto->url() . "'>" . FS_PRESUPUESTO . "</a>!");
                 }
             }
         } else {
             $this->new_error_msg("¡Imposible guardar el " . FS_PRESUPUESTO . "!");
         }
     }
 }
Ejemplo n.º 7
0
 protected function private_core()
 {
     /// ¿El usuario tiene permiso para eliminar en esta página?
     $this->allow_delete = $this->user->allow_delete_on(__CLASS__);
     $this->ppage = $this->page->get('ventas_presupuestos');
     $this->agente = FALSE;
     $presupuesto = new presupuesto_cliente();
     $this->presupuesto = FALSE;
     $this->cliente = new cliente();
     $this->cliente_s = FALSE;
     $this->divisa = new divisa();
     $this->ejercicio = new ejercicio();
     $this->fabricante = new fabricante();
     $this->familia = new familia();
     $this->forma_pago = new forma_pago();
     $this->impuesto = new impuesto();
     $this->nuevo_presupuesto_url = FALSE;
     $this->pais = new pais();
     $this->serie = new serie();
     $this->setup_validez = 30;
     $this->configurar_validez();
     /**
      * Comprobamos si el usuario tiene acceso a nueva_venta,
      * necesario para poder añadir líneas.
      */
     if ($this->user->have_access_to('nueva_venta', FALSE)) {
         $nuevoprep = $this->page->get('nueva_venta');
         if ($nuevoprep) {
             $this->nuevo_presupuesto_url = $nuevoprep->url();
         }
     }
     if (isset($_POST['idpresupuesto'])) {
         $this->presupuesto = $presupuesto->get($_POST['idpresupuesto']);
         $this->modificar();
     } else {
         if (isset($_GET['id'])) {
             $this->presupuesto = $presupuesto->get($_GET['id']);
         }
     }
     if ($this->presupuesto) {
         $this->page->title = $this->presupuesto->codigo;
         /// cargamos el agente
         if (!is_null($this->presupuesto->codagente)) {
             $agente = new agente();
             $this->agente = $agente->get($this->presupuesto->codagente);
         }
         /// cargamos el cliente
         $this->cliente_s = $this->cliente->get($this->presupuesto->codcliente);
         /// comprobamos el presupuesto
         if ($this->presupuesto->full_test()) {
             if (isset($_REQUEST['status'])) {
                 $this->presupuesto->status = intval($_REQUEST['status']);
                 if ($this->presupuesto->status == 1 and is_null($this->presupuesto->idpedido)) {
                     $this->generar_pedido();
                 } else {
                     if ($this->presupuesto->save()) {
                         $this->new_message(ucfirst(FS_PRESUPUESTO) . " modificado correctamente.");
                     } else {
                         $this->new_error_msg("¡Imposible modificar el " . FS_PRESUPUESTO . "!");
                     }
                 }
             } else {
                 /// Comprobamos las líneas
                 $this->check_lineas();
             }
         }
     } else {
         $this->new_error_msg("¡" . ucfirst(FS_PRESUPUESTO) . " de cliente no encontrado!");
     }
 }
 public function show_nombrecliente()
 {
     $nombre = 'desconocido';
     $encontrado = FALSE;
     foreach (self::$presupuestos as $p) {
         if ($p->idpresupuesto == $this->idpresupuesto) {
             $nombre = $p->nombrecliente;
             $encontrado = TRUE;
             break;
         }
     }
     if (!$encontrado) {
         $pre = new presupuesto_cliente();
         self::$presupuestos[] = $pre->get($this->idpresupuesto);
         $nombre = self::$presupuestos[count(self::$presupuestos) - 1]->nombrecliente;
     }
     return $nombre;
 }
Ejemplo n.º 9
0
<?php

/*
 * This file is part of FacturaSctipts
 * Copyright (C) 2014  Carlos Garcia Gomez  neorazorx@gmail.com
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Affero General Public License as
 * published by the Free Software Foundation, either version 3 of the
 * License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Affero General Public License for more details.
 * 
 * You should have received a copy of the GNU Affero General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
require_model('presupuesto_cliente.php');
$pre = new presupuesto_cliente();
/// marcamos como rechazados todos los presupuestos con finoferta ya pasada
$db->exec("UPDATE presupuestoscli SET status = '2' WHERE finoferta < " . $pre->var2str(Date('d-m-Y')) . " AND idpedido = NULL;");
Ejemplo n.º 10
0
 private function delete_presupuesto()
 {
     $pre = new presupuesto_cliente();
     $pre1 = $pre->get($_POST['delete']);
     if ($pre1) {
         if ($pre1->delete()) {
             $this->new_message(ucfirst(FS_PRESUPUESTO) . " " . $pre1->codigo . " borrado correctamente.");
         } else {
             $this->new_error_msg("¡Imposible borrar el " . FS_PRESUPUESTO . "!");
         }
     } else {
         $this->new_error_msg("¡" . ucfirst(FS_PRESUPUESTO) . " no encontrado!");
     }
 }
Ejemplo n.º 11
0
 private function rechazar()
 {
     $pre0 = new presupuesto_cliente();
     $offset = 0;
     $presupuestos = $pre0->all_ptepedir();
     while ($presupuestos) {
         foreach ($presupuestos as $pre) {
             $pre->status = 2;
             $pre->save();
             $offset++;
         }
         $presupuestos = $pre0->all_ptepedir();
     }
     $this->new_message($offset . ' ' . FS_PRESUPUESTOS . ' rechazados.');
 }
 private function rechazar()
 {
     $pre0 = new presupuesto_cliente();
     $num = 0;
     $offset = 0;
     $presupuestos = $pre0->all_ptepedir();
     while ($presupuestos) {
         foreach ($presupuestos as $pre) {
             if (strtotime($pre->fecha) < strtotime($_POST['rechazar'])) {
                 $pre->status = 2;
                 $pre->save();
                 $num++;
             }
             $offset++;
         }
         $presupuestos = $pre0->all_ptepedir($offset);
     }
     $this->new_message($num . ' ' . FS_PRESUPUESTOS . ' rechazados.');
 }
 protected function private_core()
 {
     $this->share_extensions();
     $this->documento = FALSE;
     if (isset($_REQUEST['presu'])) {
         $pre0 = new presupuesto_cliente();
         $this->documento = $pre0->get($_REQUEST['id']);
         if ($this->documento) {
             $this->titulo = FS_PRESUPUESTO . ' ' . $this->documento->codigo;
             $this->lineas = $this->documento->get_lineas();
             if (isset($_POST['idlinea'])) {
                 if ($this->documento->editable) {
                     $orden = 1 + count($_POST['idlinea']);
                     foreach ($_POST['idlinea'] as $idl) {
                         foreach ($this->lineas as $lin) {
                             if ($lin->idlinea == $idl) {
                                 $lin->orden = $orden;
                                 $lin->mostrar_cantidad = FALSE;
                                 $lin->mostrar_precio = FALSE;
                                 if (isset($_POST['mostrar_cantidad_' . $idl])) {
                                     $lin->mostrar_cantidad = TRUE;
                                     $lin->mostrar_precio = isset($_POST['mostrar_precio_' . $idl]);
                                 }
                                 $lin->save();
                                 break;
                             }
                         }
                         $orden--;
                     }
                     $this->new_message('Datos guardados correctamente.');
                     $this->lineas = $this->documento->get_lineas();
                 } else {
                     $this->new_error_msg('El documento ya no es editable.');
                 }
             }
         }
     } else {
         if (isset($_REQUEST['pedido'])) {
             $ped0 = new pedido_cliente();
             $this->documento = $ped0->get($_REQUEST['id']);
             if ($this->documento) {
                 $this->titulo = FS_PEDIDO . ' ' . $this->documento->codigo;
                 $this->lineas = $this->documento->get_lineas();
                 if (isset($_POST['idlinea'])) {
                     if ($this->documento->editable) {
                         $orden = 1 + count($_POST['idlinea']);
                         foreach ($_POST['idlinea'] as $idl) {
                             foreach ($this->lineas as $lin) {
                                 if ($lin->idlinea == $idl) {
                                     $lin->orden = $orden;
                                     $lin->mostrar_cantidad = FALSE;
                                     $lin->mostrar_precio = FALSE;
                                     if (isset($_POST['mostrar_cantidad_' . $idl])) {
                                         $lin->mostrar_cantidad = TRUE;
                                         $lin->mostrar_precio = isset($_POST['mostrar_precio_' . $idl]);
                                     }
                                     $lin->save();
                                     break;
                                 }
                             }
                             $orden--;
                         }
                         $this->new_message('Datos guardados correctamente.');
                         $this->lineas = $this->documento->get_lineas();
                     } else {
                         $this->new_error_msg('El documento ya no es editable.');
                     }
                 }
             }
         }
     }
 }
Ejemplo n.º 14
0
 private function nuevo_presupuesto_cliente()
 {
     $continuar = TRUE;
     $cliente = $this->cliente->get($_POST['cliente']);
     if ($cliente) {
         $this->save_codcliente($cliente->codcliente);
     } else {
         $this->new_error_msg('Cliente no encontrado.');
         $continuar = FALSE;
     }
     $almacen = $this->almacen->get($_POST['almacen']);
     if ($almacen) {
         $this->save_codalmacen($almacen->codalmacen);
     } else {
         $this->new_error_msg('Almacén no encontrado.');
         $continuar = FALSE;
     }
     $eje0 = new ejercicio();
     $ejercicio = $eje0->get_by_fecha($_POST['fecha']);
     if ($ejercicio) {
         $this->save_codejercicio($ejercicio->codejercicio);
     } else {
         $this->new_error_msg('Ejercicio no encontrado.');
         $continuar = FALSE;
     }
     $serie = $this->serie->get($_POST['serie']);
     if (!$serie) {
         $this->new_error_msg('Serie no encontrada.');
         $continuar = FALSE;
     }
     $forma_pago = $this->forma_pago->get($_POST['forma_pago']);
     if ($forma_pago) {
         $this->save_codpago($forma_pago->codpago);
     } else {
         $this->new_error_msg('Forma de pago no encontrada.');
         $continuar = FALSE;
     }
     $divisa = $this->divisa->get($_POST['divisa']);
     if ($divisa) {
         $this->save_coddivisa($divisa->coddivisa);
     } else {
         $this->new_error_msg('Divisa no encontrada.');
         $continuar = FALSE;
     }
     $presupuesto = new presupuesto_cliente();
     if ($this->duplicated_petition($_POST['petition_id'])) {
         $this->new_error_msg('Petición duplicada. Has hecho doble clic sobre el botón guardar
            y se han enviado dos peticiones. Mira en <a href="' . $presupuesto->url() . '">Presupuestos</a>
            para ver si el presupuesto se ha guardado correctamente.');
         $continuar = FALSE;
     }
     if ($continuar) {
         $presupuesto->fecha = $_POST['fecha'];
         $presupuesto->finoferta = date("Y-m-d", strtotime($_POST['fecha'] . " +30 days"));
         $presupuesto->codalmacen = $almacen->codalmacen;
         $presupuesto->codejercicio = $ejercicio->codejercicio;
         $presupuesto->codserie = $serie->codserie;
         $presupuesto->codpago = $forma_pago->codpago;
         $presupuesto->coddivisa = $divisa->coddivisa;
         $presupuesto->tasaconv = $divisa->tasaconv;
         $presupuesto->codagente = $this->agente->codagente;
         $presupuesto->observaciones = $_POST['observaciones'];
         $presupuesto->numero2 = $_POST['numero2'];
         $presupuesto->irpf = $serie->irpf;
         $presupuesto->porcomision = $this->agente->porcomision;
         foreach ($cliente->get_direcciones() as $d) {
             if ($d->domfacturacion) {
                 $presupuesto->codcliente = $cliente->codcliente;
                 $presupuesto->cifnif = $cliente->cifnif;
                 $presupuesto->nombrecliente = $cliente->nombrecomercial;
                 $presupuesto->apartado = $d->apartado;
                 $presupuesto->ciudad = $d->ciudad;
                 $presupuesto->coddir = $d->id;
                 $presupuesto->codpais = $d->codpais;
                 $presupuesto->codpostal = $d->codpostal;
                 $presupuesto->direccion = $d->direccion;
                 $presupuesto->provincia = $d->provincia;
                 break;
             }
         }
         if (is_null($presupuesto->codcliente)) {
             $this->new_error_msg("No hay ninguna dirección asociada al cliente.");
         } else {
             if ($presupuesto->save()) {
                 $art0 = new articulo();
                 $n = floatval($_POST['numlineas']);
                 for ($i = 0; $i <= $n; $i++) {
                     if (isset($_POST['referencia_' . $i])) {
                         $articulo = $art0->get($_POST['referencia_' . $i]);
                         if ($articulo) {
                             $linea = new linea_presupuesto_cliente();
                             $linea->idpresupuesto = $presupuesto->idpresupuesto;
                             $linea->referencia = $articulo->referencia;
                             $linea->descripcion = $_POST['desc_' . $i];
                             if (!$serie->siniva and $cliente->regimeniva != 'Exento') {
                                 $imp0 = $this->impuesto->get_by_iva($_POST['iva_' . $i]);
                                 if ($imp0) {
                                     $linea->codimpuesto = $imp0->codimpuesto;
                                     $linea->iva = floatval($_POST['iva_' . $i]);
                                     $linea->recargo = floatval($_POST['recargo_' . $i]);
                                 } else {
                                     $linea->iva = floatval($_POST['iva_' . $i]);
                                     $linea->recargo = floatval($_POST['recargo_' . $i]);
                                 }
                             }
                             if ($linea->iva > 0) {
                                 $linea->irpf = $presupuesto->irpf;
                             }
                             $linea->pvpunitario = floatval($_POST['pvp_' . $i]);
                             $linea->cantidad = floatval($_POST['cantidad_' . $i]);
                             //$linea->dtopor = floatval($_POST['000001'.$i]);
                             $linea->pvpsindto = $linea->pvpunitario * $linea->cantidad;
                             $linea->pvptotal = floatval($_POST['neto_' . $i]);
                             if ($linea->save()) {
                                 $presupuesto->neto += $linea->pvptotal;
                                 $presupuesto->totaliva += $linea->pvptotal * $linea->iva / 100;
                                 $presupuesto->totalirpf += $linea->pvptotal * $linea->irpf / 100;
                                 $presupuesto->totalrecargo += $linea->pvptotal * $linea->recargo / 100;
                             } else {
                                 $this->new_error_msg("¡Imposible guardar la linea con referencia: " . $linea->referencia);
                                 $continuar = FALSE;
                             }
                         } else {
                             $this->new_error_msg("Artículo no encontrado: " . $_POST['referencia_' . $i]);
                             $continuar = FALSE;
                         }
                     }
                 }
                 if ($continuar) {
                     /// redondeamos
                     $presupuesto->neto = round($presupuesto->neto, FS_NF0);
                     $presupuesto->totaliva = round($presupuesto->totaliva, FS_NF0);
                     $presupuesto->totalirpf = round($presupuesto->totalirpf, FS_NF0);
                     $presupuesto->totalrecargo = round($presupuesto->totalrecargo, FS_NF0);
                     $presupuesto->total = $presupuesto->neto + $presupuesto->totaliva - $presupuesto->totalirpf + $presupuesto->totalrecargo;
                     if ($presupuesto->save()) {
                         $this->new_message("<a href='" . $presupuesto->url() . "'>" . ucfirst(FS_PRESUPUESTO) . "</a> guardado correctamente. <a href='index.php?page=imprimir_presu_pedi&presupuesto=TRUE&id=" . $presupuesto->idpresupuesto . "'>Imprimir</a>");
                         $this->new_change(ucfirst(FS_PRESUPUESTO) . ' a Cliente ' . $presupuesto->codigo, $presupuesto->url(), TRUE);
                         $this->cliente_s = $this->cliente->get("000001");
                         //reseteo el cliente
                     } else {
                         $this->new_error_msg("¡Imposible actualizar el <a href='" . $presupuesto->url() . "'>" . FS_PRESUPUESTO . "</a>!");
                     }
                 } else {
                     if ($presupuesto->delete()) {
                         $this->new_message(ucfirst(FS_PRESUPUESTO) . " eliminado correctamente.");
                     } else {
                         $this->new_error_msg("¡Imposible eliminar el <a href='" . $presupuesto->url() . "'>" . FS_PRESUPUESTO . "</a>!");
                     }
                 }
             } else {
                 $this->new_error_msg("¡Imposible guardar el " . FS_PRESUPUESTO . "!");
             }
         }
     }
 }
 protected function process()
 {
     $this->ppage = $this->page->get('ventas_presupuestos');
     $this->agente = FALSE;
     /// desactivamos la barra de botones
     $this->show_fs_toolbar = FALSE;
     $presupuesto = new presupuesto_cliente();
     $this->presupuesto = FALSE;
     $this->cliente = new cliente();
     $this->cliente_s = FALSE;
     $this->ejercicio = new ejercicio();
     $this->familia = new familia();
     $this->impuesto = new impuesto();
     $this->nuevo_presupuesto_url = FALSE;
     $this->serie = new serie();
     /**
      * Comprobamos si el usuario tiene acceso a nueva_venta,
      * necesario para poder añadir líneas.
      */
     if ($this->user->have_access_to('nueva_venta', FALSE)) {
         $nuevoprep = $this->page->get('nueva_venta');
         if ($nuevoprep) {
             $this->nuevo_presupuesto_url = $nuevoprep->url();
         }
     }
     if (isset($_POST['idpresupuesto'])) {
         $this->presupuesto = $presupuesto->get($_POST['idpresupuesto']);
         $this->modificar();
     } else {
         if (isset($_GET['id'])) {
             $this->presupuesto = $presupuesto->get($_GET['id']);
         }
     }
     if ($this->presupuesto) {
         $this->page->title = $this->presupuesto->codigo;
         /// cargamos el agente
         if (!is_null($this->presupuesto->codagente)) {
             $agente = new agente();
             $this->agente = $agente->get($this->presupuesto->codagente);
         }
         /// cargamos el cliente
         $this->cliente_s = $this->cliente->get($this->presupuesto->codcliente);
         /// comprobamos el presupuesto
         if ($this->presupuesto->full_test()) {
             if (strtotime($this->presupuesto->finoferta) < strtotime(Date('d-m-Y')) and $this->presupuesto->status != 2) {
                 $this->new_advice("Fecha validez del " . FS_PRESUPUESTO . " vencida.");
                 $this->presupuesto->status = 2;
                 /// rechazado
                 $this->presupuesto->save();
             } else {
                 if (isset($_REQUEST['status'])) {
                     $this->presupuesto->status = intval($_REQUEST['status']);
                     if ($this->presupuesto->status == 1 and is_null($this->presupuesto->idpedido)) {
                         $this->generar_pedido();
                     } else {
                         if ($this->presupuesto->save()) {
                             $this->new_message(ucfirst(FS_PRESUPUESTO) . " modificado correctamente.");
                         } else {
                             $this->new_error_msg("¡Imposible modificar el " . FS_PRESUPUESTO . "!");
                         }
                     }
                 } else {
                     /// Comprobamos las líneas
                     $this->check_lineas();
                 }
             }
         }
     } else {
         $this->new_error_msg("¡" . ucfirst(FS_PRESUPUESTO) . " de cliente no encontrado!");
     }
 }