/** * Crea las líneas de expediciones relativas al albarán * * @param integer $idAlbaran * @param integer $idRepartidor */ private function cargaLineasAlbaran($idAlbaran, $idRepartidor) { // Cargo las lineas del albarán que no están expedidas y cuyos artículos son inventariables. // Borro las eventuales líneas de expedición que no están expedidas. $rows = array(); $lineas = new AlbaranesLineas(); $tablaLineas = $lineas->getDataBaseName() . "." . $lineas->getTableName(); $articulos = new Articulos(); $tablaArticulos = $articulos->getDataBaseName() . "." . $articulos->getTableName(); $em = new EntityManager($lineas->getConectionName()); if ($em->getDbLink()) { $query = "select l.IDLinea\n from {$tablaLineas} l, {$tablaArticulos} a\n where l.IDAlbaran = '{$idAlbaran}' and\n l.IDEstado = '1' and\n l.IDArticulo = a.IDArticulo and\n a.Inventario = '1'\n order by IDLinea ASC;"; $em->query($query); $rows = $em->fetchResult(); $expediciones = new Expediciones(); $expediciones->queryDelete("Entidad='AlbaranesCab' and IDEntidad='{$idAlbaran}' and Expedida='0'"); unset($expediciones); $em->desConecta(); } unset($em); // Crea las líneas de expedición preasignando lotes y ubicaciones foreach ($rows as $row) { $this->preasignaLinea('AlbaranesCab', $idAlbaran, new AlbaranesLineas($row['IDLinea']), $idRepartidor); } }
private function recalcula($idAlmacen) { // Poner las reservadas y el entrando a cero $stock = new Existencias(); $stock->queryUpdate(array("Reservadas" => 0, "Entrando" => 0), "IDAlmacen='{$idAlmacen}'"); // Borrar los registros de stock que estén a cero $stock->queryDelete("IDAlmacen='{$idAlmacen}' and Reales=0 and Pales=0 and Cajas=0 and Reservadas=0 and Entrando=0"); // Calcular las reservas de los artículos inventariables $lineas = new AlbaranesLineas(); $articulos = new Articulos(); $tablaLineas = $lineas->getDataBaseName() . "." . $lineas->getTableName(); $tablaArticulos = $articulos->getDataBaseName() . "." . $articulos->getTableName(); unset($lineas); unset($articulos); $query = "select l.IDArticulo,a.Codigo,l.Descripcion, sum(l.Unidades) Unidades,l.UnidadMedida "; $query .= "from {$tablaLineas} as l "; $query .= "join {$tablaArticulos} as a on l.IDArticulo=a.IDArticulo "; $query .= "where l.IDEstado='1' and a.Inventario='1' "; $query .= "group by l.IDArticulo"; $em = new EntityManager($_SESSION['project']['conection']); $em->query($query); $rows = $em->fetchResult(); $em->desConecta(); unset($em); $resultado['reservas'] = $rows; foreach ($rows as $row) { $stock = new Existencias(); $stock->hazReserva($idAlmacen, $row['IDArticulo'], $row['Unidades'], $row['UnidadMedida']); } // Calcular el entrando de los artículos inventariables $lineas = new PedidosLineas(); $articulos = new Articulos(); $tablaLineas = $lineas->getDataBaseName() . "." . $lineas->getTableName(); $tablaArticulos = $articulos->getDataBaseName() . "." . $articulos->getTableName(); unset($lineas); unset($articulos); $query = "select l.IDArticulo,a.Codigo,l.Descripcion,sum(l.Unidades) Unidades,l.UnidadMedida "; $query .= "from {$tablaLineas} as l "; $query .= "join {$tablaArticulos} as a on l.IDArticulo=a.IDArticulo "; $query .= "where l.IDEstado='1' and a.Inventario='1' "; $query .= "group by l.IDArticulo"; $em = new EntityManager($_SESSION['project']['conection']); $em->query($query); $rows = $em->fetchResult(); $em->desConecta(); unset($em); $resultado['entrando'] = $rows; foreach ($rows as $row) { $stock = new Existencias(); $stock->hazEntrando($idAlmacen, $row['IDArticulo'], $row['Unidades'], $row['UnidadMedida']); } return $resultado; }
/** * Devuelve un array con los $nTop objetos Articulos más vendidos * * @param int $nTop Por defecto 20 * @return array \Articulos */ public function getTops($nTop = 20) { if ($nTop <= 0) { $nTop = 20; } $lineasAlbaranes = new AlbaranesLineas(); $rows = $lineasAlbaranes->cargaCondicion("IDArticulo,sum(Unidades)", "1 group by IDArticulo", "sum(Unidades) DESC limit {$nTop}"); unset($lineasAlbaranes); $array = array(); foreach ($rows as $row) { $array[] = new Articulos($row['IDArticulo']); } return $array; }
/** * 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(); }
public function AlbaranesLineas() { $nItems = 0; $nErrores = 0; $dbLink = mysql_connect("localhost", "root", "albatronic"); $query = "TRUNCATE {$this->dbDestino}.ErpAlbaranesLineas"; mysql_query($query); $query = "select Codigo,IDArticulo from {$this->dbDestino}.ErpArticulos"; $result = mysql_query($query, $dbLink); while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) { $correspondencia[$row['Codigo']] = $row['IDArticulo']; } $query = "select l.*, c.IDAgente, c.Expedido, c.IDFactura, c.Fecha from {$this->dbOrigen}.albaranes_lineas as l LEFT JOIN {$this->dbOrigen}.albaranes_cab as c ON l.IDAlbaran=c.IDAlbaran where c.IDAlbaran>0"; $result = mysql_query($query, $dbLink); while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) { $c = new AlbaranesLineas(); $c->setIDAlbaran($row['IDAlbaran']); $c->setIDLinea($row['IDLinea']); $c->setIDArticulo($correspondencia[$row['IDArticulo']]); $c->setDescripcion($row['Descripcion']); $c->setUnidades($row['Unidades']); $c->setUnidadMedida("UMV"); $c->setPvpVigente($row['Precio']); $c->setPrecio($row['Precio']); $c->setDescuento($row['Descuento']); $c->setImporte($row['Importe']); $c->setImporteCosto($row['ImporteCosto']); $c->setIDAlmacen(1); if ($row['Fecha'] >= '2012-09-01') { $c->setIva($this->correspondenciaIva[$row['Iva']]); } else { $c->setIva($row['Iva']); } $c->setIDAgente($this->agentes[$row['IDAgente']]); $c->setIDComercial($this->agentes[$row['IDAgente']]); if ($row['Expedido'] == 0) { $c->setIDEstado(0); } elseif ($row['IDFactura']) { $c->setIDEstado(3); } else { $c->setIDEstado(2); } $c->setPrimaryKeyMD5(md5($row['IDLinea'])); if (!$c->create()) { $errores[] = $c->getErrores(); $nErrores++; } else { $nItems++; } } //mysql_close($dbLink); echo "Líneas Albaranes {$nItems}<br/>"; if (count($errores)) { echo "<pre>"; print_r($errores); echo "</pre>"; } }
public function NavegarAction() { if ($this->values['permisos']['permisosModulo']['CO']) { $idAlbaran = $this->request['AlbaranesCab']['IDAlbaran']; switch ($this->request['accion']) { case 'nuevo': $albaran = new AlbaranesCab(); $albaran->setIDSucursal($_SESSION['suc']); break; case 'crear': $albaran = $this->guardar($this->request['AlbaranesCab']); break; case 'buscar': $albaran = new AlbaranesCab($idAlbaran); break; case 'guardar': $albaran = $this->guardar($this->request['AlbaranesCab']); break; case 'borrar': $albaran = $this->borrar($this->request['AlbaranesCab']); break; case 'U': $albaran = $this->getUltimo(); break; case 'P': $albaran = $this->getPrimero(); break; case 'A': $albaran = $this->getAnterior($idAlbaran); break; case 'S': $albaran = $this->getSiguiente($idAlbaran); break; } /** if ($albaran->getIDEstado()->getIDTipo() == '0') { // Si el albaran está pte de confirmar, puedo modificar sus líneas y // por lo tanto le añado un objeto linea vacío $objetoNuevo = new AlbaranesLineas(); $objetoNuevo->setIDAlbaran($albaran->getIDAlbaran()); $lineas[] = $objetoNuevo; unset($objetoNuevo); } */ $lin = new AlbaranesLineas(); $rows = $lin->cargaCondicion("IDLinea", "IDAlbaran='{$albaran->getIDAlbaran()}'", "IDLinea ASC"); unset($lin); foreach ($rows as $linea) { $lineas[] = new AlbaranesLineas($linea['IDLinea']); } // Cargo los favoritos del tpv $fav = new FavoritosTpv(); $this->values['favoritos'] = $fav->cargaCondicion("Id,IDArticulo,Descripcion", "IDTpv='{$_SESSION['tpv']}'", "SortOrder ASC"); unset($fav); $this->values['albaran'] = $albaran; $this->values['lineas'] = $lineas; $template = "Tpv/index.html.twig"; unset($albaran); unset($lineas); } else { $template = "_global/forbiden.html.twig"; } return array('template' => $template, 'values' => $this->values); }
/** * 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 * * Si es por GET los parametros vienen en: * * posicion 2 (idArticulo), 3 (idCliente), 4 (periodo) * * @return array El template y los datos */ public function HistoricoVentasAction() { 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']; break; case 'POST': $idArticulo = $this->request['idArticulo']; if ($idArticulo == '0') { $idArticulo = ''; } $idCliente = $this->request['idCliente']; if ($idCliente == '0') { $idCliente = ''; } $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); $cliente = new Clientes($idCliente); $clienteTabla = $cliente->getDataBaseName() . "." . $cliente->getTableName(); $articulo = new Articulos($idArticulo); $articuloTabla = $articulo->getDataBaseName() . "." . $articulo->getTableName(); $albaran = new AlbaranesCab(); $albaranTabla = $albaran->getDataBaseName() . "." . $albaran->getTableName(); unset($albaran); $lineas = new AlbaranesLineas(); $lineasTabla = $lineas->getDataBaseName() . "." . $lineas->getTableName(); unset($lineas); // Calcular el total de unidades vendidas y el precio medio de venta // No tiene en cuenta los albaranes que no están confirmados 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, {$albaranTabla} as t2"; $query .= " WHERE t1.IDAlbaran=t2.IDAlbaran AND t2.IDEstado<>'0' 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']; } $this->values['datos'] = array('idsucursal' => $_SESSION['usuarioPortal']['SucursalActiva']['Id'], 'articulo' => $articulo, 'cliente' => $cliente, 'unidades' => $unidades, 'periodo' => $periodo, 'periodos' => $this->periodos, 'precioMedio' => number_format($precioMedio, 3)); // Obtener el litado histórico de ventas para el articulo y cliente // Solo muestra los albaranes que están confirmador o facturados $em = new EntityManager($articulo->getConectionName()); if ($em->getDbLink()) { $query = "SELECT t2.IDLinea,t1.IDAlbaran,t1.NumeroAlbaran,t1.PrimaryKeyMD5,DATE_FORMAT(t1.Fecha,'%d-%m-%Y') as Fecha,t1.IDEstado,t1.IDFactura,t2.Descripcion,t2.Unidades,t2.Precio,t2.Descuento,t2.Importe,t2.IDPromocion\n FROM {$albaranTabla} as t1, {$lineasTabla} as t2"; if ($idCliente !== '') { $query .= ", {$clienteTabla} as t3"; } if ($idArticulo !== '') { $query .= ", {$articuloTabla} as t4"; } $query .= " WHERE t1.IDAlbaran=t2.IDAlbaran"; if ($idCliente !== '') { $query .= " AND t1.IDCliente=t3.IDCliente AND t1.IDCliente='{$idCliente}' "; } if ($idArticulo !== '') { $query .= " AND t2.IDArticulo=t4.IDArticulo AND t2.IDArticulo='{$idArticulo}'"; } $query .= "\n AND t1.IDEstado<>'0'\n AND t1.Fecha>='{$desdeFecha}'\n ORDER BY t1.Fecha DESC, t1.IDAlbaran DESC"; $em->query($query); //echo $query; $rows = $em->fetchResult(); $em->desConecta(); } // Recorro el array de resultados y convierto (si procede) la columna IDPromocion // en un objeto promocion para tener todos los datos de la promocion en el template. foreach ($rows as $key => $value) { $rows[$key]['Estado'] = new EstadosAlbaranes($value['IDEstado']); if ($value['IDFactura']) { $rows[$key]['Factura'] = new FemitidasCab($value['IDFactura']); } if ($value['IDPromocion']) { $rows[$key]['IDPromocion'] = new Promociones($value['IDPromocion']); } } $this->values['listado'] = $rows; unset($em); unset($articulo); unset($cliente); return array('template' => '_Emergente/historicoVentas.html.twig', 'values' => $this->values); }
$alertas = $linea->getAlertas(); } break; case 'guardar': if ($pvpConIva == '1') { // El precio viene con iva, calculo la base $datos['Precio'] = $datos['Precio'] * 100 / (100 + $datos['Iva']); } $linea = new AlbaranesLineas($datos['IDLinea']); $linea->bind($datos); if ($linea->valida(array())) { if (!$linea->save()) { $errores = $linea->getErrores(); } else { $alertas = $linea->getAlertas(); $linea = new AlbaranesLineas($datos['IDLinea']); } } break; case 'cierre': include_once '../modules/ExpedirLineas/ExpedirLineasController.class.php'; $albaran = new AlbaranesCab($datos['IDAlbaran']); $albaran->confirma(); $expedir = new ExpedirLineasController(); $expedir->cargaLineasAlbaran($datos['IDAlbaran'], 0); //$albaran->expide(); break; } $albaran = new AlbaranesCab($datos['IDAlbaran']); $lineaAlbaran = $linea->iterator(); $lineaAlbaran['Codigo'] = $linea->getIDArticulo()->getCodigo();
/** * GENERA LOS ALBARANES Y FACTURAS DE MANTENIMIENTOS * EN BASE A LOS INDICADO EN EL ARCHIVO CSV * * @param string $fileCsv */ public function mantenimientosAction($fileCsv = '') { if ($fileCsv == '') { $fileCsv = 'tmp/mantenimientos.csv'; } $archivo = new Archivo($fileCsv); $archivo->setColumnsDelimiter(";"); if ($archivo->open()) { while (($linea = $archivo->readLine()) !== FALSE) { $idSucursal = $linea[0]; $idAlmacen = $linea[1]; $idComercial = $linea[2]; $idCliente = $linea[3]; $codigoArticulo = $linea[4]; $unidades = $linea[5]; $precio = $linea[6]; $cliente = new Clientes($idCliente); $direccionesEntrega = $cliente->getDireccionesEntrega(); $direcEntrega = $direccionesEntrega[0]; $albaran = new AlbaranesCab(); $albaran->setIDCliente($cliente->getIDCliente()); $albaran->setIDSucursal($idSucursal); $albaran->setFecha(date("d-m-Y")); $albaran->setIDDirec($direcEntrega->getIDDirec()); $albaran->setIDAlmacen($idAlmacen); $albaran->setIDComercial($idComercial); $albaran->setIDContador(2); $albaran->setIDEstado(0); $albaran->setIDFP($cliente->getIDFP()->getIDFP()); $idAlbaran = $albaran->create(); if ($idAlbaran) { $articulo = new Articulos(); $articulo = $articulo->find("Codigo", $codigoArticulo); $lineas = new AlbaranesLineas(); $lineas->setIDAlbaran($idAlbaran); $lineas->setIDArticulo($articulo->getIDArticulo()); $lineas->setDescripcion($articulo->getDescripcion() . " Mes " . date("m Y")); $lineas->setUnidades($unidades); $lineas->setPrecio($precio); $lineas->setDescuento(0); $lineas->setIva($articulo->getIDIva()->getIva()); $lineas->setImporte($unidades * $precio); $ok = $lineas->create(); if ($ok) { $albaran = new AlbaranesCab($idAlbaran); $albaran->confirma(); if ($albaran->expide()) { $albaran = new AlbaranesCab($idAlbaran); $contador = new Contadores(); $contador = $contador->dameContador($idSucursal, 2); $albaran->facturar($contador); } } else { print_r($lineas->getErrores()); exit; } } else { $this->values['errores'][] = "No se ha podido crear el albarán para " . $cliente->getRazonSocial(); } } } else { $this->values['errores'][] = "El fichero de importación " . $fileCsv . " no existe"; } }
/** * Edita, actualiza o borrar un registro * * Si viene por GET es editar * Si viene por POST puede ser actualizar o borrar * según el valor de $this->request['accion'] * * @return array con el template y valores a renderizar */ public function editAction() { switch ($this->request["METHOD"]) { case 'GET': if ($this->values['permisos']['permisosModulo']['CO']) { //SI EN LA POSICION 3 DEL REQUEST VIENE ALGO, //SE ENTIENDE QUE ES EL VALOR DE LA CLAVE PARA LINKAR CON LA ENTIDAD PADRE //ESTO SE UTILIZA PARA LOS FORMULARIOS PADRE->HIJO if ($this->request['3'] != '') { $this->values['linkBy']['value'] = $this->request['3']; } //MOSTRAR DATOS. El ID viene en la posicion 2 del request $datos = new $this->entity(); $datos = $datos->find('PrimaryKeyMD5', $this->request[2]); if ($datos->getStatus()) { $lineasAlbaranes = new AlbaranesLineas(); $promoAplicada = $lineasAlbaranes->cargaCondicion("IDPromocion", "IDPromocion='{$datos->getIDPromocion()}'"); $this->values['promoAplicada'] = count($promoAplicada); $this->values['datos'] = $datos; $this->values['errores'] = $datos->getErrores(); return array('template' => $this->entity . '/edit.html.twig', 'values' => $this->values); } else { $this->values['errores'] = array("Valor no encontrado. El objeto que busca no existe. Es posible que haya sido eliminado por otro usuario."); return array('template' => $this->entity . '/new.html.twig', 'values' => $this->values); } } else { return array('template' => '_global/forbiden.html.twig'); } break; case 'POST': //COGER DEL REQUEST EL LINK A LA ENTIDAD PADRE if ($this->values['linkBy']['id'] != '') { $this->values['linkBy']['value'] = $this->request[$this->entity][$this->values['linkBy']['id']]; } switch ($this->request['accion']) { case 'Guardar': //GUARDAR DATOS if ($this->values['permisos']['permisosModulo']['UP']) { // Cargo la entidad $datos = new $this->entity($this->request[$this->entity][$this->form->getPrimaryKey()]); // Vuelco los datos del request $datos->bind($this->request[$this->entity]); if ($datos->valida($this->form->getRules())) { $this->values['alertas'] = $datos->getAlertas(); $datos->save(); //Recargo el objeto para refrescar las propiedas que //hayan podido ser objeto de algun calculo durante el proceso //de guardado. $datos = new $this->entity($this->request[$this->entity][$datos->getPrimaryKeyName()]); } else { $this->values['errores'] = $datos->getErrores(); $this->values['alertas'] = $datos->getAlertas(); } $this->values['datos'] = $datos; return array('template' => $this->entity . '/edit.html.twig', 'values' => $this->values); } else { return array('template' => '_global/forbiden.html.twig'); } break; case 'Borrar': //BORRAR DATOS if ($this->values['permisos']['permisosModulo']['DE']) { $datos = new $this->entity(); $datos->bind($this->request[$this->entity]); if ($datos->erase()) { $datos = new $this->entity(); $this->values['datos'] = $datos; $this->values['errores'] = array(); return array('template' => $this->entity . '/new.html.twig', 'values' => $this->values); } else { $this->values['datos'] = $datos; $this->values['errores'] = $datos->getErrores(); $this->values['alertas'] = $datos->getAlertas(); return array('template' => $this->entity . '/edit.html.twig', 'values' => $this->values); } } else { return array('template' => '_global/forbiden.html.twig'); } break; } break; } }
/** * Confirma el presupuesto, que consiste en aprobarlo * y generar un albaran en base al mismo. * Devuelve el id del albaran generado * IMPORTANTE: APLICA LA TARIFA Y PROMOCIONES VIGENTES * * @return integer El id del albaran generado */ public function confirma() { //Crear cabecera de albaran. //No pongo los totales porque los recalculo una vez //creadas las lineas del albaran. $contador = new Contadores(); $albaran = new AlbaranesCab(); $albaran->setIDSucursal($this->IDSucursal); $albaran->setIDContador($contador->dameContador($this->IDSucursal, 1)); $albaran->setIDAlmacen($this->IDAlmacen); $albaran->setIDAgente($_SESSION['usuarioPortal']['Id']); $albaran->setIDComercial($this->IDComercial); $albaran->setFecha(date('d-m-Y')); $albaran->setIDCliente($this->IDCliente); $albaran->setIDDirec($this->IDDirec); $albaran->setDescuento($this->Descuento); $albaran->setObservaciones($this->Observaciones . "Proviene del Psto N. " . $this->NumeroPsto); $albaran->setIDAgencia($this->IDAgencia); $albaran->setIDFP($this->IDFP); $albaran->setIDPsto($this->IDPsto); $idAlbaran = $albaran->create(); unset($contador); if ($idAlbaran) { // Marco el presupuesto como confirmado (Estado=1) $this->setIDEstado(1); $this->setIDAlbaran($idAlbaran); $this->setFechaAceptacion(date('d-m-Y')); $this->save(); // Crear las lineas de albaran $lineas = new PstoLineas(); $rows = $lineas->cargaCondicion('*', "IDPsto='{$this->IDPsto}'", "IDLinea ASC"); unset($lineas); foreach ($rows as $row) { $linea = new AlbaranesLineas(); $linea->setIDAlbaran($idAlbaran); $linea->setIDArticulo($row['IDArticulo']); $linea->setDescripcion($row['Descripcion']); $linea->setUnidades($row['Unidades']); $linea->setPrecio($row['Precio']); $linea->setDescuento($row['Descuento']); $linea->setImporte($row['Importe']); $linea->setImporteCosto($row['ImporteCosto']); $linea->setIDAlmacen($this->IDAlmacen); $linea->setIva($row['Iva']); $linea->setRecargo($row['Recargo']); $linea->setIDAgente($_SESSION['usuarioPortal']['Id']); $linea->setIDComercial($this->IDComercial); $linea->setAltoAl($row['AltoAl']); $linea->setAnchoAl($row['AnchoAl']); $linea->setIDEstado(0); if ($linea->valida()) { $linea->create(); // Marco la línea de psto como confirmado (Estado=1) $lineaPsto = new PstoLineas($row['IDLinea']); $lineaPsto->setIDEstado(1); $lineaPsto->save(); unset($lineaPsto); } } // Recalcular el albarán $albaran->recalcula(); $albaran->save(); // Confirmar el albarán $albaran->confirma(); $this->_alertas[] = "Se ha generado el albarán n. " . $albaran->getNumeroAlbaran(); } else { $this->_alertas[] = "No se ha generado albarán"; } return $idAlbaran; }