static function makeRemesa($parametros, $filtro)
 {
     self::$parametros = $parametros;
     $ordenante = new PcaeEmpresas($_SESSION['emp']);
     if (self::$parametros['agrupar']) {
         $recibos = self::RecibosAgrupados($filtro);
     } else {
         $recibos = self::RecibosIndividuales($filtro);
     }
     $fecha = new Fecha($parametros['fechaCobro']);
     $fechaCargo = $fecha->getaaaammdd();
     self::$idRemesa = $ordenante->getCif() . date('Y-m-d') . "T" . date('H:i:s');
     $arrayRemesa = array('header' => array('id' => self::$idRemesa, 'fecha' => date('Y-m-d') . "T" . date('H:i:s'), 'fechaCargo' => $fechaCargo, 'nRecibos' => $recibos['nRecibos'], 'total' => number_format($recibos['importeTotal'], 2, ".", ""), 'razonSocial' => $ordenante->getRazonSocial(), 'direccion1' => $ordenante->getDireccion(), 'direccion2' => $ordenante->getCodigoPostal() . " " . $ordenante->getIdMunicipio()->getMunicipio() . " " . $ordenante->getIdProvincia()->getProvincia(), 'cif' => $ordenante->getCif(), 'sufijo' => $ordenante->getSufijoRemesas(), 'identificadorPresentador' => "ES" . self::digitoControlPresentador($ordenante->getCif() . "ES00") . $ordenante->getSufijoRemesas() . $ordenante->getCif(), 'iban' => $ordenante->getIban(), 'bic' => $ordenante->getBic()), 'recibos' => $recibos['recibos']);
     self::escribeLog($arrayRemesa);
     return SepaXml19::makeDocument("docs/docs{$_SESSION['emp']}/remesas/" . self::$idRemesa . ".xml", $arrayRemesa);
 }
 public function ListAction()
 {
     $filtro = $this->request['filtro'];
     $desde = new Fecha($filtro['desdeFecha']);
     $hasta = new Fecha($filtro['hastaFecha']);
     $filtroSucursal = $filtro['idSucursal'] ? "IDSucursal='{$filtro['idSucursal']}'" : "1";
     $filtroEstado = $filtro['idEstado'] != '' ? "IDEstado='{$filtro['idEstado']}'" : "1";
     $filtroQuery = "(Vencimiento>='{$desde->getaaaammdd()}') and (Vencimiento<='{$hasta->getaaaammdd()}') and ({$filtroSucursal}) and ({$filtroEstado})";
     // and (Iban<>0)";
     $recibos = new RecibosClientes();
     $rows = $recibos->cargaCondicion("IDRecibo", $filtroQuery, "Vencimiento ASC");
     unset($recibos);
     $array = array();
     foreach ($rows as $row) {
         $recibo = new RecibosClientes($row['IDRecibo']);
         $array[] = array('IDRecibo' => $recibo->getIDRecibo(), 'NumeroFactura' => $recibo->getIDFactura()->getNumeroFactura(), 'RazonSocial' => $recibo->getIDCliente()->getRazonSocial(), 'Fecha' => $recibo->getFecha(), 'Vencimiento' => $recibo->getVencimiento(), 'Importe' => $recibo->getImporte(), 'Remesa' => $recibo->getIDRemesa(), 'Iban' => $recibo->getIban(), 'Estado' => $recibo->getIDEstado()->getDescripcion());
     }
     unset($recibo);
     $this->values['datos'] = $array;
     return array('values' => $this->values, 'template' => $this->entity . '/list.html.twig');
 }
 /**
  * Proceso de facturacion.
  * Puede ser facturación separada: Una factura por cada albarán
  * o facturación agrupada: Una factura con todos los albaranes, con las siguientes salvedades:
  *
  * Se agrupan las facturas en base a la forma de pago, comercial y al flag "Facturación agrupada"
  * de la ficha del cliente.
  *
  * @return <type>
  */
 public function facturarAction()
 {
     $facturados = array();
     $filtro = $this->request['filtro'];
     $fecha = new Fecha($filtro['desdeFecha']);
     $desdeFecha = $fecha->getaaaammdd();
     $fecha = new Fecha($filtro['hastaFecha']);
     $hastaFecha = $fecha->getaaaammdd();
     unset($fecha);
     switch ($this->request['tipo']) {
         case '0':
             // Facturación individual. Se genera una factura por cada albarán
             $filter = "IDFactura='0' and IDEstado='2' and IDCliente='{$filtro['idCliente']}' and FechaEntrega>='{$desdeFecha}' and FechaEntrega<'{$hastaFecha}' and FlagFacturar='1'";
             $albaran = new AlbaranesCab();
             $rows = $albaran->cargaCondicion("IDAlbaran", $filter, "FechaEntrega ASC");
             foreach ($rows as $row) {
                 $albaran = new AlbaranesCab($row['IDAlbaran']);
                 $idFactura = $albaran->facturar(new Contadores($this->request['idContador']), $this->request['fecha']);
                 if (count($albaran->getErrores()) != 0) {
                     $this->values['errores'] = $albaran->getErrores();
                     break;
                 } else {
                     $facturados[] = $idFactura;
                 }
             }
             unset($albaran);
             break;
         case '1':
             // Agrupada. Se agrupan los albaranes por forma de pago, comercial
             $filter = "c.IDFactura='0' and c.IDEstado='2' and c.IDCliente='{$filtro['idCliente']}' and c.FechaEntrega>='{$desdeFecha}' and c.FechaEntrega<'{$hastaFecha}' and c.FlagFacturar='1'";
             //COMPRUEBO QUE NO HAYA MAS DE TRES TIPOS DE IVA ENTRE TODOS LOS ALBARANES A FACTURAR
             $albaran = new AlbaranesCab();
             $albaranTabla = $albaran->getDataBaseName() . "." . $albaran->getTableName();
             $lineas = new AlbaranesLineas();
             $lineasTabla = $lineas->getDataBaseName() . "." . $lineas->getTableName();
             $em = new EntityManager($albaran->getConectionName());
             if (!$em->getDbLink()) {
                 $this->values['errores'] = $em->getError();
                 return $this->listAction();
             }
             $query = "select l.Iva from {$lineasTabla} as l, {$albaranTabla} as c\n                        where {$filter} and c.IDAlbaran=l.IDAlbaran\n                        group by l.Iva";
             $em->query($query);
             $rows = $em->fetchResult();
             $em->desConecta();
             if (count($rows) > 3) {
                 $this->values['alertas'] = "Hay más de tres tipos de iva distintos. No se puede agrupar";
                 return $this->listAction();
             }
             $contador = new Contadores($this->request['idContador']);
             // Buscar la cuenta contable de ventas para la sucursal
             $sucursal = new Sucursales($filtro['idSucursal']);
             $ctaVentas = $sucursal->getCtaContableVentas();
             unset($sucursal);
             $cliente = new Clientes($filtro['idCliente']);
             $agruparDireccionEntrega = $cliente->getFacturacionAgrupada()->getIDTipo() == '1';
             unset($cliente);
             $query = $agruparDireccionEntrega ? "select c.IDFP,c.IDComercial, sum(c.Importe) as Importe, sum(Descuento) as Descuento from {$albaranTabla} c where {$filter} GROUP BY c.IDFP, c.IDComercial;" : "select c.IDFP,c.IDComercial, c.IDDirec, sum(c.Importe) as Importe, sum(Descuento) as Descuento from {$albaranTabla} c where {$filter} GROUP BY c.IDFP, c.IDComercial, c.IDDirec;";
             unset($cliente);
             //AGRUPO LOS ALBARANES POR FORMA DE PAGO, COMERCIAL Y (si procede) DIRECCION DE ENTREGA.
             $em = new EntityManager($albaran->getConectionName());
             $em->query($query);
             $rows = $em->fetchResult();
             $em->desConecta();
             foreach ($rows as $row) {
                 $numeroFactura = $contador->asignaContador();
                 $factura = new FemitidasCab();
                 $factura->setIDSucursal($filtro['idSucursal']);
                 $factura->setIDContador($this->request['idContador']);
                 $factura->setNumeroFactura($numeroFactura);
                 $factura->setIDAgente($_SESSION['usuarioPortal']['Id']);
                 $factura->setIDComercial($row['IDComercial']);
                 $factura->setFecha($this->request['fecha']);
                 $factura->setIDCliente($filtro['idCliente']);
                 $factura->setCuentaVentas($ctaVentas);
                 $factura->setDescuento($row['Descuento']);
                 $factura->setImporte($row['Importe']);
                 $factura->setIDFP($row['IDFP']);
                 $idFactura = $factura->create();
                 // Guardo en un array los id's de facturas generadas
                 $facturados[] = $idFactura;
                 if ($idFactura != 0) {
                     // Crear las lineas de factura
                     // No incluyo las lineas de albaran cuyas unidades sean 0
                     $em = new EntityManager($albaran->getConectionName());
                     $query = $agruparDireccionEntrega ? "select l.* from {$lineasTabla} l, {$albaranTabla} c where (c.IDAlbaran=l.IDAlbaran) and (c.IDFP='{$row['IDFP']}') and (l.Unidades<>0) and {$filter}" : "select l.* from {$lineasTabla} l, {$albaranTabla} c where (c.IDAlbaran=l.IDAlbaran) and (c.IDFP='{$row['IDFP']}') and (c.IDDirec='{$row['IDDirec']}') and (l.Unidades<>0) and {$filter}";
                     $em->query($query);
                     $lineas = $em->fetchResult();
                     $em->desConecta();
                     foreach ($lineas as $linea) {
                         $linFactura = new FemitidasLineas();
                         $linFactura->setIDFactura($idFactura);
                         $linFactura->setIDArticulo($linea['IDArticulo']);
                         $linFactura->setDescripcion($linea['Descripcion']);
                         $linFactura->setUnidades($linea['Unidades']);
                         $linFactura->setPrecio($linea['Precio']);
                         $linFactura->setDescuento($linea['Descuento']);
                         $linFactura->setImporte($linea['Importe']);
                         $linFactura->setImporteCosto($linea['ImporteCosto']);
                         $linFactura->setIDAlbaran($linea['IDAlbaran']);
                         $linFactura->setIDLineaAlbaran($linea['IDLinea']);
                         $linFactura->setIva($linea['Iva']);
                         $linFactura->setRecargo($linea['Recargo']);
                         $linFactura->setIDVenta($linea['IDVenta']);
                         $linFactura->setComisionAgente($linea['ComisionAgente']);
                         $linFactura->setComisionMontador($linea['ComisionMontador']);
                         $linFactura->setComisionar($linea['Comisionar']);
                         $linFactura->setIDAgente($_SESSION['usuarioPortal']['Id']);
                         $linFactura->setIDComercial($linea['IDComercial']);
                         $linFactura->setIDPromocion($linea['IDPromocion']);
                         $linFactura->setAltoAl($linea['AltoAl']);
                         $linFactura->setAnchoAl($linea['AnchoAl']);
                         $linFactura->setMtsAl($linea['MtsAl']);
                         $linFactura->setAltoFa($linea['AltoFa']);
                         $linFactura->setAnchoFa($linea['AnchoFa']);
                         $linFactura->setMtsFa($linea['MtsFa']);
                         if ($linFactura->create()) {
                             // Pongo el estado de la linea de albaran a "Facturado"
                             $lineaAlbaran = new AlbaranesLineas($linea['IDLinea']);
                             $lineaAlbaran->setIDEstado(3);
                             $lineaAlbaran->save();
                         } else {
                             print_r($linFactura->getErrores());
                         }
                         unset($linFactura);
                     }
                     // Totalizar la factura
                     $factura->recalcula();
                     // Crear vencimientos
                     $factura->creaVctos();
                     // Anotar en caja sin procede
                     $factura->anotaEnCaja();
                     // Actualiza las cabecera del grupo de albaranes
                     $em = new EntityManager($albaran->getConectionName());
                     $query = $agruparDireccionEntrega ? "update {$albaranTabla} c set c.IDFactura='{$idFactura}', c.IDEstado='3' where (c.IDFP='{$row['IDFP']}') and ({$filter})" : "update {$albaranTabla} c set c.IDFactura='{$idFactura}', c.IDEstado='3' where (c.IDFP='{$row['IDFP']}') and (c.IDDirec='{$row['IDDirec']}') and ({$filter})";
                     $em->query($query);
                     $em->desConecta();
                     unset($factura);
                 } else {
                     $this->values['errores'] = $factura->getErrores();
                 }
             }
             break;
     }
     if ($this->request['imprimir'] == 'on' and count($facturados) > 0) {
         $this->values['archivo'] = $this->generaPdf('FemitidasCab', $facturados);
     }
     if (count($facturados) > 0) {
         $this->values['alertas'][] = "Se han generado las siguientes facturas:";
         foreach ($facturados as $item) {
             $this->values['alertas'][] = $item;
         }
     }
     return $this->listAction();
 }
Example #4
0
 /**
  * Devuelve un array con los proveedores que tienen pedidos pendientes
  * de facturar (IDEstado=2) en el periodo de fechas indicado y de la
  * sucursal indicada.
  *
  * El array tiene tres columnas:
  *       Id (el id del proveedor),
  *       Value (la razon social del proveedor)
  *       Total (la suma de los totales de todos sus pedidos pendientes de facturar)
  *
  * @param integer $idSucursal
  * @param date $desdeFecha Fecha en formato dd/mm/aaaa
  * @param date $hastaFecha Fecha en formato dd/mm/aaaa
  * @return array Array con los proveedores
  */
 public function fetchConPendienteDeFacturar($idSucursal, $desdeFecha, $hastaFecha)
 {
     $fecha = new Fecha($desdeFecha);
     $desdeFecha = $fecha->getaaaammdd();
     $fecha = new Fecha($hastaFecha);
     $hastaFecha = $fecha->getaaaammdd();
     unset($fecha);
     $this->conecta();
     $rows = array();
     $pedidos = new PedidosCab();
     $em = new EntityManager($pedidos->getConectionName());
     if (is_resource($em->getDbLink())) {
         $filtroSucursal = $idSucursal == '' ? "(1)" : "(a.IDSucursal='{$idSucursal}')";
         $filtro = $filtroSucursal . " and\n                      (a.Fecha>='{$desdeFecha}') and\n                      (a.Fecha<='{$hastaFecha}') and\n                      (a.IDEstado=2) and\n                      (c.IDProveedor=a.IDProveedor)";
         $query = "SELECT distinct c.IDProveedor as Id, c.RazonSocial as Value, sum(a.Total) as Total\n                        FROM \n                            `{$this->_dataBaseName}`.`{$this->_tableName}` c, \n                            `{$pedidos->getDataBaseName()}`.`{$pedidos->getTableName()}` a\n                        WHERE ( {$filtro} )\n                        GROUP BY c.IDProveedor\n                        ORDER BY c.RazonSocial";
         $em->query($query);
         $rows = $em->fetchResult();
         $em->desConecta();
         unset($em);
     }
     return $rows;
 }
Example #5
0
 /**
  * Devuelve un array con los elementos de la sentencia
  * SELECT SQL necesaria para realizar el listado y que
  * se ha generado en base a las condiciones del filtro.
  * El array es:
  * array (
  *      'SELECT'   =>
  *      'FROM'     =>
  *      'WHERE'    =>
  *      'ORDER BY' =>
  * )
  *
  * @return array arrayQuery Array con los elementos que componen el query
  */
 public function makeQuery($aditionalFilter = '')
 {
     //Recorro las columnsSelected del filter para ver
     //qué columnas se han seleccionado y construir el filtro
     // Las tablas involucradas las meto en un array para controlar
     // que no se repitan en la clausa 'FROM'
     $filtro = '';
     $tablas = array();
     $tablas[$this->form->getDataBaseName() . "." . $this->form->getTable()] = $this->form->getDataBaseName() . "." . $this->form->getTable();
     foreach ($this->filter['columnsSelected'] as $key => $value) {
         if ($value != '') {
             if ($this->filter['valuesSelected'][$key] != '') {
                 if ($filtro) {
                     $filtro .= " AND ";
                 }
                 if ($this->filter['aditional'][$key]['entity']) {
                     // Es una entidad, es una columna de la tabla que referencia a otra tabla
                     // ----------------------------------------------------------------------
                     switch ($this->filter['aditional'][$key]['type']) {
                         case 'select':
                             $filtro .= "(" . $this->form->getDataBaseName() . "." . $this->form->getTable() . "." . $value . " = '" . $this->filter['valuesSelected'][$key] . "')";
                             break;
                         case 'input':
                             //Hay que construir join a otra tabla
                             //Buscar el nombre físico de la BD y de la Tabla y añadirlo
                             //a la lista de tablas
                             $entidadReferenciada = new $this->filter['aditional'][$key]['entity']();
                             $tablaReferenciada = $entidadReferenciada->getDataBaseName() . "." . $entidadReferenciada->getTableName();
                             $tablas[$tablaReferenciada] = $tablaReferenciada;
                             //Construir la parte del where para el join
                             $filtro .= "(" . $this->form->getDataBaseName() . "." . $this->form->getTable() . "." . $this->filter['columnsSelected'][$key] . "=" . $tablaReferenciada . "." . $entidadReferenciada->getPrimaryKeyName() . ")";
                             //Construir el filtro de la columna
                             $filtro .= " AND (" . $tablaReferenciada . "." . $this->filter['aditional'][$key]['params'] . " LIKE '" . $this->filter['valuesSelected'][$key] . "')";
                             unset($entidadReferenciada);
                             break;
                         case 'check':
                             //No se trata porque no tiene entidad
                             break;
                     }
                 } else {
                     // No es una entidad, es una columna de la tabla que no referencia a otra tabla
                     // Puede ser input, range, check. En cualquier otro caso es una de las columnas
                     // del filtro estándar.
                     $operador = $this->filter['aditional'][$key]['operator'];
                     switch ($this->filter['aditional'][$key]['type']) {
                         case "check":
                             // Es de tipo check pero no viene vacio
                             if ($this->filter['valuesSelected'][$key] == 'on') {
                                 $this->filter['valuesSelected'][$key] = '1';
                             } else {
                                 $this->filter['valuesSelected'][$key] = '0';
                             }
                             $filtro .= "(" . $this->form->getDataBaseName() . "." . $this->form->getTable() . "." . $value . " = '" . $this->filter['valuesSelected'][$key] . "')";
                             break;
                         case "input":
                             // Es de tipo input. Utiliza LIKE en lugar de =
                             $filtro .= "(" . $this->form->getDataBaseName() . "." . $this->form->getTable() . "." . $value . " LIKE '" . $this->filter['valuesSelected'][$key] . "')";
                             break;
                         case "range":
                             // Es un rango
                             $fecha = new Fecha($this->filter['valuesSelected'][$key]);
                             $filtro .= "(" . $this->form->getDataBaseName() . "." . $this->form->getTable() . "." . $value . " " . $operador . " '" . $fecha->getaaaammdd() . "')";
                             unset($fecha);
                             break;
                         default:
                             // Columna del filtro estándar
                             $filtro .= "(" . $this->form->getDataBaseName() . "." . $this->form->getTable() . "." . $value . " LIKE '" . $this->filter['valuesSelected'][$key] . "')";
                     }
                 }
             } else {
                 //El valor del filtro viene vacio pero puede ser check
                 if (isset($this->filter['aditional'][$key])) {
                     if ($this->filter['aditional'][$key]['type'] == "check") {
                         $this->filter['valuesSelected'][$key] = '0';
                         if ($filtro) {
                             $filtro .= " AND ";
                         }
                         $filtro .= "(" . $this->form->getDataBaseName() . "." . $this->form->getTable() . "." . $value . " = '" . $this->filter['valuesSelected'][$key] . "')";
                     }
                 }
             }
         }
     }
     if ($filtro == '') {
         $filtro = '(1)';
     }
     if ($aditionalFilter != '') {
         $filtro .= " AND (" . $aditionalFilter . ")";
     }
     // Transformo el array de tablas en un string
     $listaTablas = "";
     foreach ($tablas as $key => $value) {
         if ($listaTablas != '') {
             $listaTablas .= ", ";
         }
         $listaTablas .= $key;
     }
     $this->arrayQuery = array("SELECT" => $this->form->getDataBaseName() . "." . $this->form->getTable() . ".*", "FROM" => $listaTablas, "WHERE" => "({$filtro})", "ORDER BY" => $this->filter['orderBy']);
     $this->buildQuery();
 }
 public function RemesarAction()
 {
     $remesa = $this->request['remesa'];
     // Construir el filtro
     $fecha = new Fecha($remesa['desdeFecha']);
     $desde = $fecha->getaaaammdd();
     $fecha = new Fecha($remesa['hastaFecha']);
     $hasta = $fecha->getaaaammdd();
     unset($fecha);
     $filtro = "(r.Vencimiento>='{$desde}') and (r.Vencimiento<='{$hasta}')";
     if ($remesa['idCliente'] != '') {
         $filtro .= " and (r.IDCliente='{$remesa['idCliente']}')";
     }
     if ($remesa['idEstado'] != '') {
         $filtro .= " and (r.IDEstado='{$remesa['idEstado']}')";
     }
     foreach ($this->request['filter']['valuesSelected'] as $key => $value) {
         if ($value != '' and !in_array($key, array('6', '7', '8', '9'))) {
             if ($key == '3') {
                 $filtro .= " and c.RazonSocial like '{$value}'";
             } else {
                 if ($key == '4') {
                     $filtro .= " and c.NombreComercial like '{$value}'";
                 } else {
                     $filtro .= " and (r.{$this->request['filter']['columnsSelected'][$key]}='{$value}')";
                 }
             }
         }
     }
     //echo $filtro;exit;
     //$ficheroRemesa = Cuaderno19::makeRemesa($remesa, $filtro);
     $ficheroRemesa = Cuaderno19SepaXml::makeRemesa($remesa, $filtro);
     if ($ficheroRemesa) {
         $this->values['alertas'][] = "Se ha generado la remesa {$ficheroRemesa}";
     } else {
         $this->values['alertas'][] = "No se ha generado la remesa";
     }
     return $this->IndexAction();
 }
 public function GenerarAction()
 {
     if ($this->values['permisos']['permisosModulo']['LI']) {
         $this->idCircular = $this->request['idCircular'];
         $this->filePlantilla = $this->pathPlantillas . "/" . $this->request['plantilla'];
         $formato = $this->circulares[$this->idCircular];
         // Leer el contenido de la plantilla
         $archivo = new Archivo($this->filePlantilla);
         $this->textoPlantilla = $archivo->read("rb");
         unset($archivo);
         // HACER EL QUERY MASTER
         $this->queryMaster = $this->circulares[$this->idCircular]['queryMaster'];
         // Reemplazar en el query los valores del filtro
         $this->filter = $this->request['filter'];
         foreach ($this->filter['columnsSelected'] as $key => $value) {
             $valor = $this->filter['valuesSelected'][$key];
             if ($formato['filters'][$key]['type'] == 'date') {
                 $fecha = new Fecha($valor);
                 $valor = $fecha->getaaaammdd();
                 unset($fecha);
             }
             $this->queryMaster = str_replace($value, $valor, $this->queryMaster);
         }
         $this->queryMaster = str_replace("DBNAME", $_SESSION['project']['conection']['database'], $this->queryMaster);
         //echo $this->queryMaster;
         $em = new EntityManager($_SESSION['project']['conection']);
         if ($em->getDbLink()) {
             $em->query($this->queryMaster);
             $master = $em->fetchResult();
         }
         unset($em);
         // HACER EL QUERY DETAIL
         $this->queryDetail = $this->circulares[$this->idCircular]['queryDetail'];
         if ($this->queryDetail) {
             // Reemplazar en el query los valores del filtro
             $this->filter = $this->request['filter'];
             foreach ($this->filter['columnsSelected'] as $key => $value) {
                 $valor = $this->filter['valuesSelected'][$key];
                 if ($formato['filters'][$key]['type'] == 'date') {
                     $fecha = new Fecha($valor);
                     $valor = $fecha->getaaaammdd();
                     unset($fecha);
                 }
                 $this->queryDetail = str_replace($value, $valor, $this->queryDetail);
             }
             $this->queryDetail = str_replace("DBNAME", $_SESSION['project']['conection']['database'], $this->queryDetail);
         }
         if (!file_exists($this->pathCirculares)) {
             mkdir($this->pathCirculares);
         }
         foreach ($master as $key => $registro) {
             $texto = $this->SustituyeValores($registro, $this->request['variables']);
             $archivo = $this->pathCirculares . "/" . $_SESSION['usuarioPortal']['Id'] . "_" . $key . "_" . $this->request['plantilla'];
             $archivo = new Archivo($archivo);
             if (!$archivo->write($texto)) {
                 $this->values['errores'] = "No se ha generado {$archivo}";
             }
         }
         $this->generarZip();
         return $this->IndexAction();
     } else {
         $template = "_global/forbiden.html.twig";
     }
     return array('template' => $template, 'values' => $this->values);
 }
Example #8
0
 /**
  * Devuelve una array con los id's de pedidos que están
  * pendientes de facturar (IDEstado=2) del proveedor $idProveedor
  * en el período $desdeFecha - $hastaFecha
  *
  * @param integer $idSucursal El id de sucursal (opcional)
  * @param integer $idProveedor El id de proveedor
  * @param string $desdeFecha Fecha en formato dd/mm/aaaa
  * @param string $hastaFecha Fecha en formato dd/mm/aaaa
  * @return array Array con los ids de pedido
  */
 public function getPendientesFacturar($idSucursal, $idProveedor, $desdeFecha, $hastaFecha)
 {
     $fecha = new Fecha($desdeFecha);
     $desdeFecha = $fecha->getaaaammdd();
     $fecha = new Fecha($hastaFecha);
     $hastaFecha = $fecha->getaaaammdd();
     unset($fecha);
     $filtroSucursal = $idSucursal == '' ? "(1)" : "(IDSucursal = '{$idSucursal}')";
     $filtro = $filtroSucursal . " and\n                  (IDProveedor='{$idProveedor}') and\n                  (Fecha>='{$desdeFecha}') and\n                  (Fecha<='{$hastaFecha}') and\n                  (IDEstado=2)";
     $pedido = new PedidosCab();
     $rows = $pedido->cargaCondicion("IDPedido", $filtro, "FechaEntrada,IDPedido ASC");
     unset($pedido);
     return $rows;
 }
 public function makeReportAction()
 {
     if ($this->values['permisos']['permisosModulo']['LI']) {
         $this->idReport = $this->request['idReport'];
         $this->breakFields = explode(",", trim($this->reports[$this->idReport]['break_fields']));
         $this->query = $this->reports[$this->idReport]['query'];
         $formato = $this->reports[$this->idReport];
         // Reemplazar en el query los valores del filtro
         $this->filter = $this->request['filter'];
         foreach ($this->filter['columnsSelected'] as $key => $value) {
             $valor = $this->filter['valuesSelected'][$key];
             if ($formato['filters'][$key]['type'] == 'date') {
                 $fecha = new Fecha($valor);
                 $valor = $fecha->getaaaammdd();
                 unset($fecha);
             }
             $this->query = str_replace($value, $valor, $this->query);
         }
         $this->query = str_replace("DBNAME", $_SESSION['project']['conection']['database'], $this->query);
         $this->values['archivo'] = $this->getPdf($formato);
         $template = '_global/listadoPdf.html.twig';
     } else {
         $template = "_global/forbiden.html.twig";
     }
     return array('template' => $template, 'values' => $this->values);
 }
Example #10
0
 /**
  * Devuelve un array con los clientes que tienen albaranes pendientes
  * de facturar (IDEstado=2) en el periodo de fechas indicado y de la
  * sucursal indicada.
  *
  * El array tiene tres columnas:
  *       Id (el id del cliente),
  *       Value (la razon social del cliente)
  *       Total (la suma de los totales de todos sus albaranes pendientes de facturar)
  *
  * @param integer $idSucursal
  * @param date $desdeFecha Fecha en formato dd/mm/aaaa
  * @param date $hastaFecha Fecha en formato dd/mm/aaaa
  * @return array Array con los clientes
  */
 public function fetchConPendienteDeFacturar($idSucursal, $desdeFecha, $hastaFecha)
 {
     $fecha = new Fecha($desdeFecha);
     $desdeFecha = $fecha->getaaaammdd();
     $fecha = new Fecha($hastaFecha);
     $hastaFecha = $fecha->getaaaammdd();
     unset($fecha);
     $this->conecta();
     $rows = array();
     $albaranes = new AlbaranesCab();
     $em = new EntityManager($albaranes->getConectionName());
     if (is_resource($em->getDbLink())) {
         $filtro = "(a.IDSucursal='{$idSucursal}') and\n                        (a.FechaEntrega>='{$desdeFecha}') and\n                        (a.FechaEntrega<='{$hastaFecha}') and\n                        (a.IDFactura='0') and\n                        (c.IDCliente=a.IDCliente)";
         $query = "SELECT a.IDCliente as Id, c.RazonSocial as Value, sum(a.Total) as Total\n                        FROM `{$this->_dataBaseName}`.`{$this->_tableName}` c, `{$albaranes->getDataBaseName()}`.`{$albaranes->getTableName()}` a\n                        WHERE ( {$filtro} )\n                        GROUP BY c.IDCliente\n                        ORDER BY c.RazonSocial";
         $em->query($query);
         $rows = $em->fetchResult();
         $em->desConecta();
         unset($em);
     }
     unset($albaranes);
     return $rows;
 }
Example #11
0
 public function RecibosAgrupados($filtro)
 {
     //$aux = substr(self::$parametros['fechaCobro'], 0, 4) . '20' . substr(self::$parametros['fechaCobro'], -2);
     $fecha = new Fecha(self::$parametros['fechaCobro']);
     $fCargo = $fecha->getaaaammdd();
     unset($fecha);
     $recibos = new RecibosClientes();
     $clientes = new Clientes();
     $tablaRecibos = $recibos->getDataBaseName() . "." . $recibos->getTableName();
     $tablaClientes = $clientes->getDataBaseName() . "." . $clientes->getTableName();
     $em = new EntityManager($recibos->getConectionName());
     if ($em->getDbLink()) {
         $filtro .= " and (Remesar='1') and (CHAR_LENGTH(r.Iban)>23) and (r.Iban<>'ES8200000000000000000000')";
         $query = "select r.IDCliente,sum(r.Importe) as Importe,r.Iban,c.RazonSocial from {$tablaRecibos} as r\n            left join {$tablaClientes} as c on r.IDCliente=c.IDCliente\n            where {$filtro}\n            group by r.IDCliente,r.Iban,c.RazonSocial \n            having sum(r.Importe)>0\n            order by c.RazonSocial,r.Vencimiento ASC";
         $em->query($query);
         $rows = $em->fetchResult();
         echo $query;
     }
     unset($em);
     unset($clientes);
     foreach ($rows as $recibo) {
         $codclie = self::Rellena($recibo['IDCliente'], 12);
         $titular = self::Rellena($recibo['RazonSocial'], 40);
         $importe = self::Ceros(str_replace(".", "", $recibo['Importe']), 10);
         $concepto = self::Rellena("Facturas", 40);
         $reg = "5680" . self::$ordenante['Cif'] . self::$ordenante['SufijoRemesas'] . $codclie . $titular . substr($recibo['Iban'], 4, strlen($recibo['Iban'])) . $importe . self::Vacio(16) . $concepto . self::Vacio(8);
         self::Escribe(self::$fp, $reg);
         self::$nRegistrosOrdenante += 1;
         self::$totalOrdenante += $recibo['Importe'];
         self::$nDomiciliacionesOrdenante += 1;
         //Marcar los recibos con el ID de la remesa
         $filtro = str_replace("r.", "", $filtro);
         $recibos->queryUpdate(array('IDRemesa' => self::$idRemesa, 'Vencimiento' => $fCargo, 'IDEstado' => self::$parametros['idEstado']), "IDCliente='{$recibo['IDCliente']}' and {$filtro}");
     }
 }
 public function getFechaMandato($formato = "ddmmaaaa")
 {
     $fecha = new Fecha($this->FechaMandato);
     if ($formato == 'aaaammdd') {
         $formato = $fecha->getaaaammdd();
     } else {
         $formato = $fecha->getddmmaaaa();
     }
     unset($fecha);
     return $formato;
 }
 /**
  * Realiza validaciones antes del traspaso
  * 
  * @return boolean TRUE se todo es correcto
  */
 private function valida()
 {
     if (trim($this->request['DesdeFecha']) == '') {
         $this->errores[] = "Debe indicar una fecha de inicio";
     }
     if (trim($this->request['HastaFecha']) == '') {
         $this->errores[] = "Debe indicar una fecha de fin";
     }
     if (count($this->errores) == 0) {
         $fecha = new Fecha($this->request['DesdeFecha']);
         $this->desdeFecha = $fecha->getaaaammdd();
         $fecha = new Fecha($this->request['HastaFecha']);
         $this->hastaFecha = $fecha->getaaaammdd();
         unset($fecha);
         if ($this->desdeFecha > $this->hastaFecha) {
             $this->errores[] = "La fecha de fin debe ser igual o superior a la de inicio";
         }
     }
     return count($this->errores) == 0;
 }
 /**
  * Proceso de facturación agrupada.
  *
  * Se pueden agrupar pedidos de distintas sucursales, en cuyo caso
  * la factura generada se asignará a la sucursal en curso.
  *
  * Se agrupan las facturas en base a la forma de pago.
  *
  * @return <type>
  */
 public function ConformarAction()
 {
     $facturados = array();
     $filtro = $this->request['filtro'];
     $fecha = new Fecha($filtro['desdeFecha']);
     $desdeFecha = $fecha->getaaaammdd();
     $fecha = new Fecha($filtro['hastaFecha']);
     $hastaFecha = $fecha->getaaaammdd();
     unset($fecha);
     if ($filtro['idSucursal'] == '') {
         $filterSucursal = "(1)";
         $idSucursal = $_SESSION['suc'];
     } else {
         $filterSucursal = "(IDSucursal='{$filtro['idSucursal']}')";
         $idSucursal = $filtro['idSucursal'];
     }
     $filter = $filterSucursal . " AND c.IDFactura='0' and c.IDEstado='2' and c.IDProveedor='{$filtro['idProveedor']}' and c.Fecha>='{$desdeFecha}' and c.Fecha<'{$hastaFecha}' and c.FlagFacturar='1'";
     //COMPRUEBO QUE NO HAYA MAS DE TRES TIPOS DE IVA ENTRE TODOS LOS ALBARANES A FACTURAR
     $pedidos = new PedidosCab();
     $em = new EntityManager($pedidos->getConectionName());
     if (!$em->getDbLink()) {
         $this->values['errores'] = $em->getError();
         return $this->listAction();
     }
     $query = "SELECT l.Iva\n                    FROM\n                        {$em->getDataBase()}.ErpPedidosLineas as l,\n                        {$em->getDataBase()}.ErpPedidosCab as c\n                    WHERE {$filter} and c.IDPedido=l.IDPedido\n                    GROUP BY l.Iva";
     $em->query($query);
     $rows = $em->fetchResult();
     $em->desConecta();
     if (count($rows) > 3) {
         $this->values['alertas'] = "Hay más de tres tipos de iva distintos. No se puede agrupar";
         return $this->listAction();
     }
     $contador = new Contadores($this->request['idContador']);
     // Buscar la cuenta contable de compras para la sucursal
     $sucursal = new Sucursales($idSucursal);
     $ctaCompras = $sucursal->getCtaContableCompras();
     unset($sucursal);
     //AGRUPO LOS PEDIDOS POR FORMA DE PAGO.
     $em = new EntityManager($pedidos->getConectionName());
     $query = "SELECT c.IDFP, sum(c.Total) as Total FROM {$pedidos->getDataBaseName()}.ErpPedidosCab as c WHERE {$filter} GROUP BY c.IDFP";
     $em->query($query);
     $rows = $em->fetchResult();
     $em->desConecta();
     foreach ($rows as $row) {
         $numeroFactura = $contador->asignaContador();
         $factura = new FrecibidasCab();
         $factura->setIDSucursal($idSucursal);
         $factura->setIDContador($this->request['idContador']);
         $factura->setNumeroFactura($numeroFactura);
         $factura->setSuFactura($this->request['suFactura']);
         $factura->setFecha($this->request['fecha']);
         $factura->setIDProveedor($filtro['idProveedor']);
         $factura->setCuentaCompras($ctaCompras);
         $factura->setIDFP($row['IDFP']);
         $idFactura = $factura->create();
         // Guardo en un array los id's de facturas generadas
         $facturados[] = $idFactura;
         if ($idFactura != 0) {
             // Crear las líneas de factura
             $em = new EntityManager($pedidos->getConectionName());
             $query = "select l.* from {$pedidos->getDataBaseName()}.ErpPedidosLineas l, {$pedidos->getDataBaseName()}.ErpPedidosCab c where (c.IDPedido=l.IDPedido) and (c.IDFP='{$row['IDFP']}') and {$filter}";
             $em->query($query);
             $lineas = $em->fetchResult();
             $em->desConecta();
             foreach ($lineas as $linea) {
                 $linFactura = new FrecibidasLineas();
                 $linFactura->setIDFactura($idFactura);
                 $linFactura->setIDArticulo($linea['IDArticulo']);
                 $linFactura->setDescripcion($linea['Descripcion']);
                 $linFactura->setUnidades($linea['UnidadesPtesFacturar']);
                 $linFactura->setPrecio($linea['Precio']);
                 $linFactura->setDescuento($linea['Descuento']);
                 $linFactura->setIva($linea['Iva']);
                 $linFactura->setIDPedido($linea['IDPedido']);
                 $linFactura->setIDLineaPedido($linea['IDLinea']);
                 if ($linFactura->create()) {
                     // Pongo el estado de la linea de pedido a "Facturado" y
                     // quitar el pendiente de facturar.
                     $lineaPedido = new PedidosLineas($linea['IDLinea']);
                     $lineaPedido->setIDEstado(3);
                     $lineaPedido->setUnidadesPtesFacturar(0);
                     $lineaPedido->save();
                 }
                 unset($linFactura);
             }
             // Totalizar la factura
             $factura->recalcula();
             // Crear vencimientos
             $factura->creaVctos();
             // Anotar en caja si procede
             $factura->anotaEnCaja();
             // Actualiza las cabecera del grupo de pedidos
             $em = new EntityManager($pedidos->getConectionName());
             $query = "update {$pedidos->getDataBaseName()}.ErpPedidosCab c set c.IDFactura='{$idFactura}', c.IDEstado='3' where (c.IDFP='{$row['IDFP']}') and ({$filter})";
             $em->query($query);
             $em->desConecta();
             unset($factura);
         } else {
             $this->values['errores'] = $factura->getErrores();
         }
     }
     return $this->listAction();
 }