/** * Edita, actualiza o borrar un registro * @return array con el template y valores a renderizar */ public function editAction() { $entidad = $this->request['Recepciones']['Entidad']; $idEntidad = $this->request['Recepciones']['IDEntidad']; $idLineaEntidad = $this->request['Recepciones']['IDLineaEntidad']; switch ($this->request['accion']) { case 'G': //GUARDAR DATOS $datos = new Recepciones($this->request['Recepciones']['IDLinea']); $datos->bind($this->request['Recepciones']); if ($datos->valida($this->form->getRules())) { $datos->save(); } $this->values['errores'] = $datos->getErrores(); $this->values['alertas'] = $datos->getAlertas(); unset($datos); return $this->listAction($entidad, $idEntidad); break; case 'B': //BORRAR LINEA DE RECEPCION $datos = new Recepciones($this->request['Recepciones']['IDLinea']); $datos->erase(); $this->values['errores'] = $datos->getErrores(); unset($datos); return $this->listAction($entidad, $idEntidad); break; case 'Varios': //CREA OTRA LINEA DE RECEPCION, SI PROVIENE DE TRASPASO OBLIGO EL MISMO LOTE // Calculo las unidades totales que llevo entre todas las eventuales // lineas de recepción para la linea de pedido/traspaso/elaboración en curso $lineaRecepcion = new Recepciones(); $rows = $lineaRecepcion->cargaCondicion("sum(UnidadesNetas) as UnidadesNetas", "Entidad='{$entidad}' and IDEntidad='{$idEntidad}' and IDLineaEntidad='{$idLineaEntidad}'"); $suma = $rows[0]['UnidadesNetas']; // Propongo las unidades que faltan para la nueva linea de recepción $lineaRecepcion = new Recepciones($this->request['Recepciones']['IDLinea']); $unidades = $lineaRecepcion->getIDLineaEntidad()->getUnidades() - $suma; // Crea la linea nueva de recepción, si proviene de traspaso obligo el mismo lote $datos = new Recepciones(); $datos->setEntidad($entidad); $datos->setIDEntidad($idEntidad); $datos->setIDLineaEntidad($idLineaEntidad); $datos->setIDAlmacen($lineaRecepcion->getIDAlmacen()->getIDAlmacen()); $datos->setIDAlmacenero($lineaRecepcion->getIDAlmacenero()->getIDAgente()); $datos->setIDArticulo($lineaRecepcion->getIDArticulo()->getIDArticulo()); $datos->setUnidades($unidades); $datos->setUnidadMedida($lineaRecepcion->getUnidadMedida()); $datos->setUnidadesBrutas($unidades); $datos->setUnidadesNetas($unidades); if ($entidad == 'TraspasosCab') { $datos->setIDLote($lineaRecepcion->getIDLote()->getIDLote()); } $datos->create(); $this->values['errores'] = $datos->getErrores(); $this->values['alertas'] = $datos->getAlertas(); unset($datos); unset($lineaRecepcion); return $this->listAction($entidad, $idEntidad); break; } }
/** * Expide la linea de traspaso de tipo 0 (la de envío) * Actualiza las existencias y marca la línea como expedida. * Genera la línea de traspaso de tipo 1 (la de entrada) poniendo el 'entrando' y * generar tantas líneas de recepción como líneas de expedición se hayan generado * para mantener las mismas unidades y lotes * * NO SE REALIZA NINGUN TRATAMIENTO CON LAS EXISTENCIAS SI EL ARTICULO NO ES INVENTARIABLE * * @return boolean */ public function expide() { $ok = true; $articulo = new Articulos($this->IDArticulo); $esInventariable = $articulo->getInventario()->getIDTipo(); if ($esInventariable) { // Quitar la reserva de mercancía $exi = new Existencias(); $ok = $exi->quitaReserva($this->IDAlmacen, $this->IDArticulo, $this->Unidades, $this->UnidadMedida); unset($exi); } if ($esInventariable and $ok) { // Expedir la línea de traspaso $expedicion = new Expediciones(); $unidadesNetas = $expedicion->expide("TraspasosCab", $this->IDLinea); unset($expedicion); } else { $unidadesNetas = $this->Unidades; } if ($ok) { // Marcar la línea de traspaso como expedida y // poner las unidades netas expedidas $this->setIDEstado(2); $this->setUnidades($unidadesNetas); $this->totalizaLinea(); $this->save(); // Generar la línea de traspaso de tipo 1 (la de entrada) y poner el entrando $idAlmacenDestino = $this->getIDTraspaso()->getIDAlmacenDestino()->getIDAlmacen(); $lineaEntrada = new TraspasosLineas(); $lineaEntrada->setIDLinea(''); $lineaEntrada->setIDTraspaso($this->IDTraspaso); $lineaEntrada->setTipo(1); $lineaEntrada->setIDArticulo($this->IDArticulo); $lineaEntrada->setDescripcion($this->Descripcion); $lineaEntrada->setUnidades($this->Unidades); $lineaEntrada->setUnidadMedida($this->UnidadMedida); $lineaEntrada->setIDAlmacen($idAlmacenDestino); $lineaEntrada->setPrecio($this->Precio); $lineaEntrada->setImporte($this->Importe); $lineaEntrada->setIDEstado(0); $idLineaEntrada = $lineaEntrada->create(); unset($lineaEntrada); // Generar tantas líneas de recepción como líneas de expedición haya para // la línea de traspaso expedida $expedicion = new Expediciones(); $rows = $expedicion->cargaCondicion("*", "Entidad='TraspasosCab' and IDLineaEntidad='{$this->IDLinea}'"); unset($expedicion); foreach ($rows as $row) { $recepcion = new Recepciones(); $recepcion->setEntidad($row['Entidad']); $recepcion->setIDEntidad($row['IDEntidad']); $recepcion->setIDLineaEntidad($idLineaEntrada); $recepcion->setIDAlmacen($idAlmacenDestino); $recepcion->setIDAlmacenero($_SESSION['usuarioPortal']['Id']); $recepcion->setIDArticulo($row['IDArticulo']); $recepcion->setUnidades($row['Unidades']); $recepcion->setUnidadMedida($row['UnidadMedida']); $recepcion->setUnidadesBrutas($row['Unidades']); $recepcion->setUnidadesNetas($row['Unidades']); $recepcion->setIDLote($row['IDLote']); $recepcion->create(); unset($recepcion); } // Poner el entrando $exi = new Existencias(); $ok = $exi->hazEntrando($idAlmacenDestino, $this->IDArticulo, $this->getUnidades(), $this->getUnidadMedida()); unset($exi); } unset($articulo); return $ok; }