/** * Devuelve un array de objetos PedidosCab con los pedidos * que están en estado Confirmado (1) y cuyo destino es el * almacén seleccionado * * @return array Array de objetos PedidosCab */ private function getPedidos() { $data = array(); $pedido = new PedidosCab(); $filtro = "IDEstado='1' and IDAlmacen='{$this->request['idAlmacen']}'"; $rows = $pedido->cargaCondicion('IDPedido', $filtro, 'FechaEntrega ASC'); unset($pedido); foreach ($rows as $row) { $data[] = new PedidosCab($row['IDPedido']); } return $data; }
/** * Borra una factura recibida, sus líneas, los posibles recibos * y marca el/los pedidos asociados como no facturados * Siempre que no esté traspasa a contabilidad (Asiento=0) * * @return boolean */ public function erase() { if ($this->Asiento == 0) { if ($this->borraVctos()) { if ($this->borraLineas()) { // Actualiza la cabecera del pedido $pedidos = new PedidosCab(); $pedidos->queryUpdate(array("IDFactura" => 0, "IDEstado" => 2), "IDFactura='{$this->IDFactura}'"); unset($pedidos); // Borrar la cabecera de la factura parent::erase(); } } } else { $this->_errores[] = "No se puede borrar. Está traspasada a contabilidad"; } return count($this->_errores) == 0; }
public function PedidosCab() { $nItems = 0; $nErrores = 0; $dbLink = mysql_connect("localhost", "root", "albatronic"); $query = "TRUNCATE {$this->dbDestino}.ErpPedidosCab"; mysql_query($query); $query = "select distinct IDPedido,IDFactura from {$this->dbOrigen}.frecibidas_lineas"; $result = mysql_query($query, $dbLink); while ($row1 = mysql_fetch_array($result, MYSQL_ASSOC)) { $correspondencia[$row1['IDPedido']] = $row1['IDFactura']; } $query = "select * from {$this->dbOrigen}.pedidos_cab"; $result = mysql_query($query, $dbLink); while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) { $c = new PedidosCab(); $c->setIDPedido($row['IDPedido']); $c->setIDSucursal(1); $c->setIDAlmacen(1); $c->setIDAgente(2); $c->setSuPedido($row['SuPedido']); $c->setFecha($row['Fecha']); $c->setFechaEntrega($row['FechaEntrega']); $c->setFechaEntrada($row['FechaEntrada']); $c->setIDProveedor($row['IDProveedor']); $c->setImporte($row['Importe']); $c->setDescuento($row['Descuento']); $c->setBaseImponible1($row['BaseImponible1']); $c->setIva1($row['Iva1']); $c->setCuotaIva1($row['CuotaIva1']); $c->setRecargo1($row['Recargo1']); $c->setCuotaRecargo1($row['CuotaRecargo1']); $c->setBaseImponible2($row['BaseImponible2']); $c->setIva2($row['Iva2']); $c->setCuotaIva2($row['CuotaIva2']); $c->setRecargo2($row['Recargo2']); $c->setCuotaRecargo2($row['CuotaRecargo2']); $c->setBaseImponible3($row['BaseImponible3']); $c->setIva3($row['Iva3']); $c->setCuotaIva3($row['CuotaIva3']); $c->setRecargo3($row['Recargo3']); $c->setCuotaRecargo3($row['CuotaRecargo3']); $c->setTotalBases($row['TotalBases']); $c->setTotalIva($row['TotalIva']); $c->setTotalRecargo($row['TotalRecargo']); $c->setTotal($row['Total']); $c->setObservaciones($row['Observaciones']); $c->setIDFP($row['IDFP']); $c->setIDAgencia(1); if ($row['Recepcionado'] == 'S') { $c->setIDEstado(2); $c->setIDFactura(isset($correspondencia[$row['IDPedido']]) ? $correspondencia[$row['IDPedido']] : 0); } else { $c->setIDEstado(0); $c->setIDFactura(0); } $c->setPrimaryKeyMD5(md5($row['IDPedido'])); if (!$c->create()) { $errores[] = $c->getErrores(); $nErrores++; } else { $nItems++; } } //mysql_close($dbLink); echo "Pedidos creados {$nItems}<br/>"; if (count($errores)) { echo "<pre>"; print_r($errores); echo "</pre>"; } }
private function cargarLineas($idPedido, $idFirma, $idCliente, $archivoCsv) { $nLinea = 0; $errores = array(); $csv = new Archivo($archivoCsv); $csv->setColumnsDelimiter(";"); if ($csv->open()) { $articulo = new Articulos(); while ($linea = $csv->readLine()) { $nLinea++; $codigo = trim($linea[0]); $unidades = trim($linea[1]); if ($codigo != '') { $filtro = "IdFirma='{$idFirma}' and (Codigo='{$codigo}' or CodigoEAN='{$codigo}')"; //echo $filtro,"\n"; $rows = $articulo->cargaCondicion("Id,IdFamilia,Codigo,Descripcion,Pvd", $filtro); $row = $rows[0]; if ($row['Id'] != '') { $articulo = new Articulos($row['Id']); $pedidoLinea = new PedidosLineas(); $pedidoLinea->setIdPedido($idPedido); $pedidoLinea->setIdFirma($idFirma); $pedidoLinea->setIdFamilia($row['IdFamilia']); $pedidoLinea->setIdCliente($idCliente); $pedidoLinea->setIdArticulo($row['Id']); $pedidoLinea->setDescripcion($row['Descripcion']); $pedidoLinea->setUnidades($unidades); $pedidoLinea->setPrecio($row['Pvd']); $pedidoLinea->setIva($articulo->getIdIva()->getIva()); $pedidoLinea->setImporte($unidades * $row['Pvd']); $id = $pedidoLinea->create(); if (!$id) { $errores[] = "Línea {$nLinea}: No se pudo crear la línea de pedido."; } } else { $errores[] = "Línea {$nLinea}: El artículo {$codigo} no existe o no pertenece a la firma del pedido."; } } } $csv->close(); unset($articulo); unset($pedidoLinea); // Recalcular los totales del pedido if (count($errores) == 0) { $pedido = new PedidosCab($idPedido); $pedido->save(); unset($pedido); } } else { $errores[] = "No se ha podido abrir el archivo cargado"; } return $errores; }
/** * Renderiza el template _Emergente/historicoVentas.html.twig * mostrando las ventas realizadas a un cliente de un articulo dado en un periodo. * * La información se obtiene en base a los albaranes confimardos o facturados. * No se tienen en cuenta los albaranes no confirmados. * * Puede entrar por POST o por GET. * * Si es por POST los parametros vienen en: * * idArticulo, idCliente, periodo, formato * * Si es por GET los parametros vienen en: * * posicion 2 (idArticulo), 3 (idCliente), 4 (periodo), 5 (formato) * * @return array El template y los datos */ public function HistoricoVentasAction() { $periodos = array(array('Id' => '0', 'Value' => 'Último Mes'), array('Id' => '1', 'Value' => 'Último Trimestre'), array('Id' => '2', 'Value' => 'Último Año'), array('Id' => '3', 'Value' => 'Todo')); switch ($this->request["METHOD"]) { case 'GET': $idArticulo = $this->request['2']; if ($idArticulo == '0') { $idArticulo = ''; } $idCliente = $this->request['3']; if ($idCliente == '0') { $idCliente = ''; } $periodo = $this->request['4']; $formato = $this->request['5']; break; case 'POST': $idArticulo = $this->request['idArticulo']; if ($idArticulo == '0') { $idArticulo = ''; } $idCliente = $this->request['idCliente']; if ($idCliente == '0') { $idCliente = ''; } $periodo = $this->request['periodo']; $formato = $this->request['formato']; break; } $formato = strtoupper($formato); // Construir la parte del filtro que depende del periodo switch ($periodo) { case '': $periodo = 1; case '0': // Ultimo mes $diferenciaDias = -30; break; case '1': // Ultimo Trimestre $diferenciaDias = -90; break; case '2': // Ultimo año $diferenciaDias = -365; break; case '3': // Todo, 20 años hacia atrás $diferenciaDias = -7300; break; } $fecha = new Fecha(date('Y-m-d')); $desdeFecha = $fecha->sumaDias($diferenciaDias); unset($fecha); $cliente = new Clientes($idCliente); $clienteTabla = $cliente->getDataBaseName() . "." . $cliente->getTableName(); $articulo = new Articulos($idArticulo); $articuloTabla = $articulo->getDataBaseName() . "." . $articulo->getTableName(); $pedido = new PedidosCab(); $pedidoTabla = $pedido->getDataBaseName() . "." . $pedido->getTableName(); unset($pedido); $lineas = new PedidosLineas(); $lineasTabla = $lineas->getDataBaseName() . "." . $lineas->getTableName(); unset($lineas); // Calcular el total de unidades vendidas y el precio medio de venta if ($idArticulo != '' or $idCliente != '') { $em = new EntityManager($articulo->getConectionName()); if ($em->getDbLink()) { $query = "SELECT SUM(t1.Unidades) as Unidades, SUM(t1.Importe) as Importe\n FROM {$lineasTabla} as t1, {$pedidoTabla} as t2"; $query .= " WHERE t1.IdPedido=t2.Id AND t2.Fecha>='{$desdeFecha}'"; if ($idCliente !== '') { $query .= " AND t2.IdCliente='{$idCliente}'"; } if ($idArticulo !== '') { $query .= " AND t1.IdArticulo='{$idArticulo}'"; } $em->query($query); //echo $query; $rows = $em->fetchResult(); $em->desConecta(); } $precioMedio = $rows[0]['Unidades'] != 0 ? $rows[0]['Importe'] / $rows[0]['Unidades'] : 0; $unidades = $rows[0]['Unidades'] == '' ? 0 : $rows['0']['Unidades']; } $values['datos'] = array('articulo' => $articulo->iterator(), 'cliente' => $cliente->iterator(), 'unidades' => $unidades, 'periodo' => $periodo, 'periodos' => $periodos, 'precioMedio' => number_format($precioMedio, 3)); // Obtener el litado histórico de ventas para el articulo y cliente $em = new EntityManager($articulo->getConectionName()); if ($em->getDbLink()) { $query = "SELECT t2.Id,t1.Id NumeroPedido,t1.PrimaryKeyMD5,DATE_FORMAT(t1.Fecha,'%d-%m-%Y') as Fecha,t2.Descripcion,t2.Unidades,t2.Precio,t2.Descuento1,t2.Descuento2,t2.Descuento3,t2.Importe\n FROM {$pedidoTabla} as t1, {$lineasTabla} as t2"; if ($idCliente !== '') { $query .= ", {$clienteTabla} as t3"; } if ($idArticulo !== '') { $query .= ", {$articuloTabla} as t4"; } $query .= " WHERE t1.Id=t2.IdPedido"; if ($idCliente !== '') { $query .= " AND t1.IdCliente=t3.Id AND t1.IdCliente='{$idCliente}' "; } if ($idArticulo !== '') { $query .= " AND t2.IdArticulo=t4.Id AND t2.IdArticulo='{$idArticulo}'"; } $query .= "\n AND t1.Fecha>='{$desdeFecha}'\n ORDER BY t1.Fecha DESC, t1.Id DESC"; $em->query($query); //echo $query; $rows = $em->fetchResult(); $em->desConecta(); } $values['listado'] = $rows; unset($em); unset($articulo); unset($cliente); if (in_array($formato, $this->formats)) { $values['status'] = '200'; $values['statusMessage'] = ""; switch ($formato) { case '': case 'JSON': header('Content-type: application/json; charset="UTF-8"', true); $template = "_global/json.twig"; $this->values['json'] = $values; break; case 'HTML': $this->values = $values; $template = "_Emergente/historicoVentas.html.twig"; break; } } else { $this->values['json'] = array('status' => 401, 'statusMessage' => 'Format not implemented', 'result' => array()); $template = "_global/json.twig"; } return array('template' => $template, 'values' => $this->values); }
/** * 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; }
static function getCsv($idPedido) { $pedido = new PedidosCab($idPedido); $cabecera = '"Firma";"' . $pedido->getIdFirma()->getRazonSocial() . '"\\n'; $cabecera .= '"Cliente";"' . $pedido->getIdCliente()->getRazonSocial() . '"\\n'; $cabecera .= '"Dir. Entrega";"' . $pedido->getIdDirec()->getDireccion() . '"\\n'; $cabecera .= '"Fecha";"' . $pedido->getFecha() . '"\\n'; $cabecera .= '"S/Pedido";"' . $pedido->getSuPedido() . '"\\n'; $cabecera .= '"Observaciones";"' . $pedido->getObservations() . '"\\n'; $cabecera .= '"Forma de Pago";"' . $pedido->getFormaPago() . '"\\n'; $cabecera .= '"Agencia Tte.";"' . $pedido->getAgencia() . '"\\n\\n'; $lineas = '"Articulo";"Descripcion";"Unidades";"Precio";"Descuento1";"Descuento2";"Descuento3";"Importe"\\n'; foreach ($pedido->getLineas() as $linea) { $lineas .= '"' . $linea->getIdArticulo()->getCodigo() . '";' . '"' . $linea->getIdArticulo()->getDescripcion() . '";' . '"' . $linea->getUnidades() . '";' . '"' . $linea->getPrecio() . '";' . '"' . $linea->getDescuento1() . '";' . '"' . $linea->getDescuento2() . '";' . '"' . $linea->getDescuento3() . '";' . '"' . $linea->getImporte() . '"\\n'; } $csv = $lineas; $fileCsv = Archivo::getTemporalFileName("export", "csv"); $archivo = new Archivo($fileCsv); if (!$archivo->write($csv)) { $fileCsv = ""; } return $fileCsv; }
/** * 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(); }
/** * Crea un registro nuevo en la entidad correspondiente * y su correspondiente registro en las líneas de recepción * * @return array con el template y valores a renderizar */ public function newAction() { switch ($this->request["entidad"]) { //CREAR UNA LINEA DE PEDIDO NUEVA Y SU CORRESPONDIENTE LINEA DE RECEPCION case 'PedidosCab': $pedido = new PedidosCab($this->request['idEntidad']); $lineaPedido = new PedidosLineas(); $lineaPedido->setIDPedido($this->request['idEntidad']); $lineaPedido->setIDArticulo($this->request['idArticulo']); $lineaPedido->setDescripcion($this->request['Descripcion']); $lineaPedido->setUnidades(0); $lineaPedido->setIDEstado(1); $lineaPedido->setIDAgente($_SESSION['usuarioPortal']['Id']); $lineaPedido->setIDAlmacen($pedido->getIDAlmacen()->getIDAlmacen()); if ($lineaPedido->valida()) { if ($lineaPedido->create()) { $this->creaLineaRecepcion($this->request['entidad'], $this->request['idEntidad'], $lineaPedido); $pedido->setIDAlmacen($pedido->getIDAlmacen()->getIDAlmacen()); $pedido->setIncidencias($pedido->getIncidencias() . "\nFuera de pedido: " . $lineaPedido->getDescripcion()); $pedido->save(); } } $this->values['errores'] = $lineaPedido->getErrores(); unset($pedido); unset($lineaPedido); break; //CREAR UNA LINEA DE PEDIDO NUEVA Y SU CORRESPONDIENTE LINEA DE RECEPCION //CREAR UNA LINEA DE PEDIDO NUEVA Y SU CORRESPONDIENTE LINEA DE RECEPCION case 'ManufacCab': $manufac = new ManufacCab($this->request['idEntidad']); $lineaManufac = new ManufacLineas(); $lineaManufac->setIDManufac($this->request['idEntidad']); $lineaManufac->setTipo(1); $lineaManufac->setIDArticulo($this->request['idArticulo']); $lineaManufac->setDescripcion($this->request['Descripcion']); $lineaManufac->setUnidades(1); $lineaManufac->setIDEstado(0); $lineaManufac->setIDAlmacen($manufac->getIDAlmacenDestino()->getIDAlmacen()); if ($lineaManufac->valida()) { if ($lineaManufac->create()) { $this->creaLineaRecepcion($this->request['entidad'], $this->request['idEntidad'], $lineaManufac); $manufac->setIDAlmacenDestino($manufac->getIDAlmacenDestino()->getIDAlmacen()); $manufac->setIncidencias($manufac->getIncidencias() . "\nFuera de pedido: " . $lineaManufac->getDescripcion()); $manufac->save(); } } $this->values['errores'] = $lineaManufac->getErrores(); unset($manufac); unset($lineaManufac); break; //CREAR UNA LINEA DE TRASPASO NUEVA Y SU CORRESPONDIENTE LINEA DE RECEPCION //CREAR UNA LINEA DE TRASPASO NUEVA Y SU CORRESPONDIENTE LINEA DE RECEPCION case 'TraspasosCab': $traspaso = new TraspasosCab($this->request['idEntidad']); $lineaTraspaso = new TraspasosLineas(); $lineaTraspaso->setIDTraspaso($this->request['idEntidad']); $lineaTraspaso->setTipo(1); $lineaTraspaso->setIDArticulo($this->request['idArticulo']); $lineaTraspaso->setDescripcion($this->request['Descripcion']); $lineaTraspaso->setUnidades(1); $lineaTraspaso->setIDEstado(0); $lineaTraspaso->setIDAlmacen($traspaso->getIDAlmacenDestino()->getIDAlmacen()); if ($lineaTraspaso->valida()) { if ($lineaTraspaso->create()) { $this->creaLineaRecepcion($this->request['entidad'], $this->request['idEntidad'], $lineaTraspaso); $traspaso->setIDAlmacenDestino($traspaso->getIDAlmacenDestino()->getIDAlmacen()); $traspaso->setIncidencias($traspaso->getIncidencias() . "\nFuera de traspaso: " . $lineaTraspaso->getDescripcion()); $traspaso->save(); } } $this->values['errores'] = $lineaTraspaso->getErrores(); unset($traspaso); unset($lineaTraspaso); break; } return $this->listAction($this->request['entidad'], $this->request['idEntidad']); }
static function getTopFirmas($periodo = 3, $nItems = 10) { // Construir la parte del filtro que depende del periodo switch ($periodo) { case '': $periodo = 0; case '0': // Ultimo mes $diferenciaDias = -30; $titlePeriodo = "Último mes"; break; case '1': // Ultimo Trimestre $diferenciaDias = -90; $titlePeriodo = "Últime trimestre"; break; case '2': // Ultimo Semestre $diferenciaDias = -180; $titlePeriodo = "Último Semestre"; break; case '3': // Ultimo año $diferenciaDias = -365; $titlePeriodo = "Últimos 12 meses"; break; case '4': // Todo, 20 años hacia atrás $diferenciaDias = -7300; $titlePeriodo = "Todos los datos"; break; } $fecha = new Fecha(); $desdeFecha = $fecha->sumaDias($diferenciaDias); unset($fecha); $firma = new Firmas(); $clienteTabla = $firma->getDataBaseName() . "." . $firma->getTableName(); $pedidos = new PedidosCab(); $pedidosTabla = $pedidos->getDataBaseName() . "." . $pedidos->getTableName(); unset($pedidos); $em = new EntityManager($firma->getConectionName()); if ($em->getDbLink()) { $query = "SELECT t2.RazonSocial as name, SUM(t1.TotalBases) as y\n FROM {$pedidosTabla} as t1, {$clienteTabla} as t2\n WHERE t1.IdFirma=t2.Id AND t1.Fecha>='{$desdeFecha}' \n GROUP BY t1.IdFirma\n ORDER BY SUM(t1.TotalBases) DESC LIMIT {$nItems}"; //echo $query; $em->query($query); $rows = $em->fetchResult(); $em->desConecta(); } unset($firma); return array('title' => "TOP-{$nItems} Firmas. {$titlePeriodo}", 'serieName' => "Ventas", 'serie' => $rows); }
/** * 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; }
private function importPedidosCab() { $obj = new PedidosCab(); $obj->truncate(); $file = getcwd() . "/docs/docs1/import/PEDIDOS.txt"; $archivo = new Archivo($file); $archivo->setColumnsDelimiter(";"); $archivo->setColumnsEnclosure("\""); $errores = 0; if ($archivo->open()) { // Leer la cabecera $titulos = $archivo->readLine(); // Leer el contenido $i = -1; while ($row = $archivo->readLine()) { $i++; $item = array(); foreach ($titulos as $key => $titulo) { $item[$titulo] = $row[$key]; } $fecha = explode("/", substr($item['FECHA_PEDIDO'], 0, -8)); $fecha = $fecha[0] . "-" . str_pad($fecha[1], 2, "0", STR_PAD_LEFT) . "-" . str_pad($fecha[2], 2, "0", STR_PAD_LEFT); $fechaEntrega = explode("/", substr($item['FECHA_ENTREGA'], 0, -8)); $fechaEntrega = $fechaEntrega[0] . "-" . str_pad($fechaEntrega[1], 2, "0", STR_PAD_LEFT) . "-" . str_pad($fechaEntrega[2], 2, "0", STR_PAD_LEFT); $obj = new PedidosCab(); $obj->setId($item['IDPEDIDO']); $obj->setFecha($fecha); $obj->setFechaEntrega($fechaEntrega); $obj->setIdFirma($item['IDFIRMA']); $obj->setIdCliente($item['IDCLIENTE']); $obj->setIdDirec($item['IDDIREC_ENTREGA']); $obj->setIdAgente($item['IDSUBAGENTE']); $obj->setIdAlmacen($item['IDALMACEN']); $obj->setSuPedido(utf8_encode($item['SN/PEDIDO'])); $obj->setReferencia(utf8_encode($item['REFERENCIA'])); $obj->setObservations(utf8_encode($item['OBSERVACIONES'])); $obj->setComisionAgente(self::trataNumero($item['COMISION_AGENTE'])); $obj->setComisionSubagente(self::trataNumero($item['COMISION_SUBAGENTE'])); $obj->setDescuentos(self::trataMoneda($item['DESCUENTOS'])); $obj->setDescuentoProntoPago(self::trataMoneda($item['DESCUENTO_PP'])); $obj->setPortes($item['PORTES']); $obj->setImprimir($item['IMPRIMIR']); $obj->setServido($item['SERVIDO']); $obj->setFormaPago(utf8_encode($item['FORMA_PAGO'])); $obj->setAgencia(utf8_encode($item['AGENCIA_TTE'])); $base1 = self::trataMoneda($item['BASE1']); $cuotaIva1 = $base1 * $item['IVA1'] / 100; $cuotaRec1 = $base1 * $item['REC1'] / 100; $obj->setBaseImponible1($base1); $obj->setIva1($item['IVA1']); $obj->setCuotaIva1($cuotaIva1); $obj->setRecargo1($item['REC1']); $obj->setCuotaRecargo1($cuotaRec1); $base2 = self::trataMoneda($item['BASE2']); $cuotaIva2 = $base2 * $item['IVA2'] / 100; $cuotaRec2 = $base2 * $item['REC2'] / 100; $obj->setBaseImponible2($base2); $obj->setIva2($item['IVA2']); $obj->setCuotaIva2($cuotaIva2); $obj->setRecargo2($item['REC2']); $obj->setCuotaRecargo2($cuotaRec2); $base3 = self::trataMoneda($item['BASE3']); $cuotaIva3 = $base3 * $item['IVA3'] / 100; $cuotaRec3 = $base3 * $item['REC3'] / 100; $obj->setBaseImponible3($base3); $obj->setIva3($item['IVA3']); $obj->setCuotaIva3($cuotaIva3); $obj->setRecargo3($item['REC3']); $obj->setCuotaRecargo3($cuotaRec3); $totBases = $base1 + $base2 + $base3; $totIva = $cuotaIva1 + $cuotaIva2 + $cuotaIva3; $totRecargo = $cuotaRec1 + $cuotaRec2 + $cuotaRec3; $obj->setTotalBases($totBases); $obj->setTotalIva($totIva); $obj->setTotalRecargo($totRecargo); $obj->setTotalPedido($totBases + $totIva + $totRecargo); $id = $obj->create(); if (!$id) { print_r($obj->getErrores()); $errores++; } } $archivo->close(); } if ($errores) { echo "Errores PedidosCab {$errores}</br>"; } }
/** * Crea pedido web en base a lo que hay * en el carrito de la sesion en curso. * * Si ya hubiera un pedido asociado a esa sesion, * lo borra y lo crea de nuevo * * @param integer $idCliente EL id del cliente * @param boolean $avisoRecepcionParcial * @return integer $idPedido */ static function creaPedido($idCliente, $avisoRecepcionParcial = 0) { if ($avisoRecepcionParcial == '') { $avisoRecepcionParcial = 0; } $carrito = new Carrito(); $filtro = "Sesion='{$_SESSION['IdSesion']}'"; $rows = $carrito->cargaCondicion("*", $filtro, "Id ASC"); unset($carrito); $totales = self::getTotales(); $pedido = new PedidosCab(); $pedido->setIdSucursal($_SESSION['usuarioPortal']['SucursalActiva']['Id']); $pedido->setIdUsuario($_SESSION['usuarioPortal']['Id']); $pedido->setIdCliente($idCliente); $pedido->setFecha(date('Y-m-d H:i:s')); $pedido->setNItems($totales['Unidades']); $pedido->setImporte($totales['total']); $pedido->setAvisoRecepcionParcial($avisoRecepcionParcial); $idPedido = $pedido->create(); if ($idPedido > 0) { // Crear las líneas foreach ($rows as $row) { $linea = new PedidosLineas(); $linea->setIdPedido($idPedido); $linea->setIdSucursal($row['IdSucursal']); $linea->setIdDistribuidora($row['IdDistribuidora']); $linea->setIdUsuario($row['IdUsuario']); $linea->setIdCliente($idCliente); $linea->setSku($row['Sku']); $linea->setEan($row['Ean']); $linea->setDescripcion($row['Descripcion']); $linea->setAutor($row['Autor']); $linea->setEditorial($row['Editorial']); $linea->setUrlImagen($row['UrlImagen']); $linea->setUnidades($row['Unidades']); $linea->setPrecio($row['Precio']); $linea->setDescuento($row['Descuento']); $linea->setPvd($row['Pvd']); $linea->setImporte($row['Importe']); $linea->setIva($row['Iva']); $linea->setRecargo($row['Recargo']); $linea->setIdEstado(0); $linea->setIvaIncluido($row['IvaIncluido']); $linea->create(); //print_r($linea->getErrores()); } } return $idPedido; }
/** * Envia por email el albaran en formato PDF * @return <type> */ public function enviarAction() { switch ($this->request['accion']) { case 'Enviar': $para = $this->request['Para']; $de = $this->request['De']; $deNombre = $this->request['DeNombre']; $conCopia = $this->request['Cc']; $conCopiaOculta = $this->request['Cco']; $asunto = $this->request['Asunto']; $mensaje = $this->request['Mensaje']; $adjuntos = array($this->request['Adjunto']); $envio = new Mail(); $ok = $envio->send($para, $de, $deNombre, $conCopia, $conCopiaOculta, $asunto, $mensaje, $adjuntos); if ($ok) { $entidad = new $this->entity($this->request['PedidosCab']['IDPedido']); $entidad->auditaEmail(); unset($entidad); $this->values['resultadoEnvio'][] = "Envío con éxito"; } else { $this->values['resultadoEnvio'] = $envio->getMensaje(); } unset($envio); break; case 'CambioFormato': $datos = new PedidosCab($this->request['PedidosCab']['IDPedido']); $formatos = DocumentoPdf::getFormatos($this->entity); $formato = $this->request['Formato']; if ($formato == '') { $formato = 0; } $this->values['archivo'] = $this->generaPdf($this->entity, array('0' => $datos->getIDPedido()), $formato); $this->values['email'] = array('Para' => $this->request['Para'], 'De' => $this->request['De'], 'DeNombre' => $this->request['DeNombre'], 'Cc' => $this->request['Cc'], 'Cco' => $this->request['Cco'], 'Asunto' => $this->request['Asunto'], 'Formatos' => $formatos, 'Formato' => $formato, 'Mensaje' => $this->request['Mensaje'], 'idPedido' => $datos->getIDPedido()); break; case '': $datos = new $this->entity($this->request[$this->entity]['IDPedido']); $formatos = DocumentoPdf::getFormatos($this->entity); $formato = $this->request['Formato']; if ($formato == '') { $formato = 0; } $this->values['archivo'] = $this->generaPdf($this->entity, array('0' => $datos->getIDPedido()), $formato); $this->values['email'] = array('Para' => $datos->getIDProveedor()->getEMail(), 'De' => $_SESSION['usuarioPortal']['email'], 'DeNombre' => $datos->getIDAgente()->getNombre(), 'Cco' => $_SESSION['usuarioPortal']['email'], 'Asunto' => 'Pedido n. ' . $datos->getIDPedido(), 'Formatos' => $formatos, 'Formato' => $formato, 'Mensaje' => 'Le adjunto el pedido ' . $datos->getIDPedido() . "\n\nUn saludo.", 'idPedido' => $datos->getIDPedido()); break; } return parent::enviarAction(); }
/** * Devuelve un array con las entradas en curso del articulo y almacen indicado * * Cada elemento del array es otro array con los elementos: * array ( * 'IDPedido' => * 'PrimaryKeyMD5' => * 'Fecha' => * 'FechaEntraga' => * 'IDProveedor' => * 'RazonSocial => * 'Entrando' => * ) * * @param integer $idAlmacen El id de almacen * @return array Array con las unidades entrando */ public function getEntrando($idAlmacen) { $reservas = array(); $tablaPedidos = new PedidosCab(); $tablaPedidosLineas = new PedidosLineas(); $tablaProveedores = new Proveedores(); $em = new EntityManager($this->getConectionName()); if ($em->getDbLink()) { $query = "select\n cab.IDPedido,\n cab.PrimaryKeyMD5, \n cab.Fecha,\n cab.FechaEntrega,\n cab.IDProveedor,\n prv.RazonSocial,\n sum(lin.Unidades) as Entrando\n from\n {$tablaPedidos->getDataBaseName()}.{$tablaPedidos->getTableName()} as cab,\n {$tablaPedidosLineas->getDataBaseName()}.{$tablaPedidosLineas->getTableName()} as lin,\n {$tablaProveedores->getDataBaseName()}.{$tablaProveedores->getTableName()} as prv\n where\n cab.IDPedido = lin.IDPedido and\n cab.IDProveedor = prv.IDProveedor and\n lin.IDEstado = '1' and\n lin.IDArticulo = '{$this->IDArticulo}' and\n lin.IDAlmacen = '{$idAlmacen}'\n group by IDPedido\n order by Fecha ASC"; $em->query($query); //echo $query,"<br/>"; $reservas = $em->fetchResult(); $em->desConecta(); } unset($em); unset($tablaPedidos); unset($tablaPedidosLineas); unset($tablaProveedores); return $reservas; }
/** * Renderiza el template _Emergente/historicoCompras.html.twig * mostrando las compras realizadas a un proveedor de un articulo y un periodo dado. * * La información se obtiene en base a los pedidos RECEPCIONADOS o FACTURADOS. * * No se tienen en cuenta los pedidos no confirmados. * * Puede entrar por POST o por GET. * * Si es por POST los parametros vienen en: * * idArticulo, idProveedor, periodo * * Si es por GET los parametros vienen en: * * posicion 2 (idArticulo), 3 (idProveedor), 4 (periodo) * * @return array El template y los datos */ public function HistoricoComprasAction() { switch ($this->request["METHOD"]) { case 'GET': $idArticulo = $this->request['2']; if ($idArticulo == '0') { $idArticulo = ''; } $IDProveedor = $this->request['3']; if ($IDProveedor == '0') { $IDProveedor = ''; } $periodo = $this->request['4']; break; case 'POST': $idArticulo = $this->request['idArticulo']; if ($idArticulo == '0') { $idArticulo = ''; } $idProveedor = $this->request['idProveedor']; if ($idProveedor == '0') { $idProveedor = ''; } $periodo = $this->request['periodo']; break; } // Construir la parte del filtro que depende del periodo switch ($periodo) { case '': $periodo = 0; case '0': // Ultimo mes $diferenciaDias = -30; break; case '1': // Ultimo Trimestre $diferenciaDias = -90; break; case '2': // Ultimo año $diferenciaDias = -365; break; case '3': // Todo, 20 años hacia atrás $diferenciaDias = -7300; break; } $fecha = new Fecha(date('Y-m-d')); $desdeFecha = $fecha->sumaDias($diferenciaDias); unset($fecha); $proveedor = new Proveedores($idProveedor); $proveedorTabla = $proveedor->getDataBaseName() . "." . $proveedor->getTableName(); $articulo = new Articulos($idArticulo); $articuloTabla = $articulo->getDataBaseName() . "." . $articulo->getTableName(); $pedidos = new PedidosCab(); $pedidosTabla = $pedidos->getDataBaseName() . "." . $pedidos->getTableName(); unset($pedidos); $lineas = new PedidosLineas(); $lineasTabla = $lineas->getDataBaseName() . "." . $lineas->getTableName(); unset($lineas); // Calcular el total de unidades compradas y el precio medio de compra // Solo calcula los pedidos que están recepcionados o facturados if ($idArticulo != '' or $idProveedor != '') { $em = new EntityManager($articulo->getConectionName()); if ($em->getDbLink()) { $query = "SELECT SUM(t1.Unidades) as Unidades, SUM(t1.Importe) as Importe\n FROM {$lineasTabla} as t1, {$pedidosTabla} as t2\n WHERE t1.IDPedido=t2.IDPedido AND t2.IDEstado>='2' AND t2.FechaEntrada>='{$desdeFecha}'"; if ($idProveedor !== '') { $query .= " AND t2.IDProveedor='{$idProveedor}'"; } if ($idArticulo !== '') { $query .= " AND t1.IDArticulo='{$idArticulo}'"; } $em->query($query); $rows = $em->fetchResult(); $em->desConecta(); } $precioMedio = $rows[0]['Unidades'] != 0 ? $rows[0]['Importe'] / $rows[0]['Unidades'] : 0; $unidades = $rows[0]['Unidades'] == '' ? 0 : $rows['0']['Unidades']; } $this->values['datos'] = array('idsucursal' => $_SESSION['usuarioPortal']['SucursalActiva']['Id'], 'articulo' => $articulo, 'proveedor' => $proveedor, 'unidades' => $unidades, 'periodo' => $periodo, 'periodos' => $this->periodos, 'precioMedio' => number_format($precioMedio, 3)); // Obtener el litado historico de compras para el articulo y proveedor // Solo muestra los pedidos que están confirmador o facturados $em = new EntityManager($articulo->getConectionName()); if ($em->getDbLink()) { $query = "SELECT t2.IDLinea,t1.IDPedido,t1.PrimaryKeyMD5,DATE_FORMAT(t1.FechaEntrada,'%d-%m-%Y') as FechaEntrada,t4.Descripcion,t2.Unidades,t2.Precio,t2.Descuento,t2.Importe\n FROM {$pedidosTabla} as t1, {$lineasTabla} as t2"; if ($idProveedor !== '') { $query .= ", {$proveedorTabla} as t3"; } if ($idArticulo !== '') { $query .= ", {$articuloTabla} as t4"; } $query .= " WHERE t1.IDPedido=t2.IDPedido"; if ($idProveedor !== '') { $query .= " AND t1.IDProveedor=t3.IDProveedor AND t1.IDProveedor='{$idProveedor}' "; } if ($idArticulo !== '') { $query .= " AND t2.IDArticulo=t4.IDArticulo AND t2.IDArticulo='{$idArticulo}'"; } $query .= "\n AND t1.IDEstado>='2'\n AND t1.FechaEntrada>='{$desdeFecha}'\n ORDER BY t1.FechaEntrada, t1.IDPedido DESC"; //echo $query; $em->query($query); $rows = $em->fetchResult(); $em->desConecta(); } $this->values['listado'] = $rows; unset($em); unset($articulo); unset($proveedor); return array('template' => '_Emergente/historicoCompras.html.twig', 'values' => $this->values); }
/** * Validaciones antes de actualizar o crear */ public function valida(array $rules) { unset($this->_errores); //Para tener disponibles los datos de la //cabecera del pedido $pedido = new PedidosCab($this->IDPedido); // Compruebo la existencia del artículo y que pertenezca a // la sucursal de la cabecera del pedido. if ($this->IDArticulo == '') { $this->_errores[] = "Debe indicar un código de artículo"; } else { $articulo = new Articulos($this->IDArticulo); if ($articulo->getStatus() == 0) { $this->_errores[] = "El artículo indicado no existe"; unset($articulo); } } // Si existe el articulo ... if (count($this->_errores) == 0) { $aviso = $articulo->getAvisosPedidos(); if ($aviso) { $this->_alertas[] = $aviso; } $this->checkPackingCompras($articulo); // Si la descripcion está vacia, pongo la del artículo // Si trae algo, la respeto. if ($this->Descripcion == '') { $this->setDescripcion($articulo->getDescripcion()); } // Si no se ha indicado precio, pongo el precio de costo de la ficha del articulo if ($this->Precio == '') { $this->setPrecio($articulo->getPrecioCosto()); } // Totalizar la linea de pedido $this->setImporte($this->Unidades * $this->Precio * (1 - $this->Descuento / 100)); //Comparar el precio respecto al PMC. //Si el importe neto (despues de dctos) unitario supera el P.M.C. se emite alerta if ($this->getImporte() / $this->getUnidades() > $articulo->getPmc()) { $this->_alertas[] = "El precio supera al Precio Medio de Compra: " . $articulo->getPmc(); } // Poner el mismo almacen de la cabecera del pedido y el agente en curso $this->setIDAlmacen($pedido->getIDAlmacen()->getIDAlmacen()); $this->setIDAgente($_SESSION['usuarioPortal']['Id']); // Si el proveedor no está sujeto a Iva, pongo a 0 el iva y el recargo if ($pedido->getIDProveedor()->getIva()->getIDTipo() == '0') { $this->setIva('0'); $this->setRecargo('0'); } else { // Si no se ha indicando iva, pongo el iva asociado al artículo, if ($this->Iva == '') { $this->setIva($articulo->getIDIva()->getIva()); } } // Si el artículo es inventariable: // Comprobar existencias sin tener en cuenta lote ni ubicación // de almacen. Solo se buscan existencias en el almacen indicado // en la línea del pedido if ($articulo->getInventario()->getIDTipo() == '1') { $existencias = new Existencias(); $stock = $existencias->getStock($this->IDArticulo, $this->IDAlmacen); // Se genera una alerta si hay stock disponible o pendiente de entrada if ($stock['PE'] > 0 or $stock['DI'] > 0) { $this->_alertas[] = "Hay stock"; $this->_alertas[] = "---------"; } $this->_alertas[] = "Disponible: " . $stock['DI']; $this->_alertas[] = "Real: " . $stock['RE']; $this->_alertas[] = "Reservado: " . $stock['RV']; $this->_alertas[] = "Pte. Entrada: " . $stock['PE']; } } unset($articulo); unset($pedido); unset($existencias); return count($this->_errores) == 0; }
/** * Pedidos que estando confirmados, su fecha prevista de * entrega es anterior al día actual. * * @return type */ static function getEntradasRetrasadas() { $ped = new PedidosCab(); $tablaPedidos = $ped->getDataBaseName() . "." . $ped->getTableName(); $prov = new Proveedores(); $tablaProveedores = $prov->getDataBaseName() . "." . $prov->getTableName(); $rows = array(); $hoy = date('Y-m-d'); $em = new EntityManager($ped->getConectionName()); if ($em->getDbLink()) { $query = "select a.PrimaryKeyMD5 as PrimaryKeyMD5,IDPedido,Fecha,RazonSocial,TotalBases from {$tablaPedidos} as a left join {$tablaProveedores} as c on a.IDProveedor=c.IDProveedor where (IDEstado='1') and FechaEntrega<'{$hoy}' order by Fecha ASC"; $em->query($query); $rows = $em->fetchResult(); } unset($em); unset($ped); unset($prov); return $rows; }