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(); }
/** * 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; }
/** * 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); }
/** * 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); }
/** * 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; }
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(); }