/** * Expide todas las líneas de expedición correspondientes * a la entidad $entidad y línea de entidad $idLineaEntidad * * @param string $entidad La entidad padre (AlbaranesCab,ManufacCab,TraspasosCab) * @param integer $idLineaEntidad El id de la línea de la entidad padre * @return float La cantidad de unidades expedidas */ public function expide($entidad, $idLineaEntidad) { $unidadesExpedidas = 0; $rows = $this->cargaCondicion("*", "Entidad='{$entidad}' and IDLineaEntidad='{$idLineaEntidad}' and Expedida='0'"); foreach ($rows as $row) { // Si no se han indicado unidades a expedir, // no se actualiza stock ni se genera mvto de almacen. if ($row['Unidades'] != 0) { $valores = array('UM' => $row['UnidadMedida'], 'Reales' => $row['Unidades'], 'Pales' => $row['Pales'], 'Cajas' => $row['Cajas'], 'Reservadas' => 0, 'Entrando' => 0); $mvtoAlmacen = new MvtosAlmacen(); $ok = $mvtoAlmacen->genera($row['Entidad'], 'S', $row['IDEntidad'], $row['IDAlmacen'], $row['IDArticulo'], $row['IDLote'], $row['IDUbicacion'], 0, $valores); // Valores con los que actualizar } $unidadesExpedidas += $row['Unidades']; if ($ok) { // Marcar la linea de expedición como expedida $expedicion = new Expediciones($row['IDLinea']); $expedicion->setExpedida(1); $expedicion->save(); } else { $expedicion = new Expediciones($row['IDLinea']); $expedicion->setExpedida(0); $expedicion->setUnidades(0); $expedicion->save(); $unidadesExpedidas = 0; } } unset($mvtoAlmacen); unset($expedicion); return $unidadesExpedidas; }
/** * Recepciona todas las líneas de recepción correspondientes * a la entidad $entidad y línea de entidad $idLineaEntidad * * @param string $entidad La entidad padre (PedidosCab,ManufacCab,TraspasosCab) * @param integer $idLineaEntidad El id de la línea de la entidad padre * @return float La cantidad de unidades recepcionadas */ public function recepciona($entidad, $idLineaEntidad, $flagDeposito = '0') { $unidadesRecepcionadas = 0; $rows = $this->cargaCondicion("*", "Entidad='{$entidad}' and IDLineaEntidad='{$idLineaEntidad}' and Recepcionada='0'"); foreach ($rows as $row) { $valores = array('UM' => $row['UnidadMedida'], 'Reales' => $row['UnidadesNetas'], 'Pales' => $row['Pales'], 'Cajas' => $row['Cajas'], 'Reservadas' => 0, 'Entrando' => 0); $mvtoAlmacen = new MvtosAlmacen(); $ok = $mvtoAlmacen->genera($row['Entidad'], 'E', $row['IDEntidad'], $row['IDAlmacen'], $row['IDArticulo'], $row['IDLote'], $row['IDUbicacion'], $flagDeposito, $valores); // Valores con los que actualizar $unidadesRecepcionadas += $row['UnidadesNetas']; if ($ok) { // Marcar la linea de recepción como recepcionada. $recepcion = new Recepciones($row['IDLinea']); $recepcion->setRecepcionada(1); $recepcion->save(); } else { // Ha fallado la creación/validación del movimiento. No se // marca la recepción como recepcionada $recepcion = new Recepciones($row['IDLinea']); $recepcion->setRecepcionada(0); $recepcion->setUnidadesBrutas(0); $recepcion->setUnidadesNetas(0); $recepcion->save(); $unidadesRecepcionadas = 0; } } unset($mvtoAlmacen); unset($recepcion); return $unidadesRecepcionadas; }
/** * Crea un registro nuevo * * Si viene por GET muestra un template vacio * Si viene por POST crea un registro * * @return array con el template y valores a renderizar */ public function newAction() { if ($this->values['permisos']['permisosModulo']['IN']) { switch ($this->request["METHOD"]) { case 'GET': //MOSTRAR FORMULARIO VACIO $datos = new MvtosAlmacen(); $this->values['datos'] = $datos; $this->values['errores'] = array(); return array('template' => $this->entity . '/new.html.twig', 'values' => $this->values); break; case 'POST': //CREAR NUEVO REGISTRO $datosRequest = $this->request['MvtosAlmacen']; $valores = array('UM' => 'UMA', 'Reales' => $datosRequest['Unidades'], 'Pales' => $datosRequest['Pales'], 'Cajas' => $datosRequest['Cajas']); $tipoMvtos = new TiposMvtosAlmacen($datosRequest['IDTipo']); $signo = $tipoMvtos->getSigno()->getIDTipo(); $documento = $tipoMvtos->getTipoDocumento(); unset($tipoMvtos); $idAlmacen = $datosRequest['IDAlmacen']; $idArticulo = $datosRequest['IDArticulo']; $idLote = $datosRequest['IDLote']; $idUbicacion = $datosRequest['IDUbicacion']; $datos = new MvtosAlmacen(); $datos->setDescripcion($datosRequest['Descripcion']); $datos->setObservaciones($datosRequest['Observaciones']); if ($datos->genera($documento, $signo, 0, $idAlmacen, $idArticulo, $idLote, $idUbicacion, 0, $valores)) { $this->values['errores'] = $datos->getErrores(); $this->values['alertas'] = $datos->getAlertas(); //Recargo el objeto para refrescar las propiedas que //hayan podido ser objeto de algun calculo durante el proceso //de guardado. $datos = new MvtosAlmacen($datos->getPrimaryKeyValue()); $this->values['datos'] = $datos; if ($this->values['errores']) { return array('template' => $this->entity . '/new.html.twig', 'values' => $this->values); } else { return array('template' => $this->entity . '/edit.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 . '/new.html.twig', 'values' => $this->values); } break; } } else { return array('template' => '_global/forbiden.html.twig'); } }
public function newAction() { if ($this->request['METHOD'] == 'POST') { $datosRequest = $this->request['MvtosAlmacen']; if ($this->valida($datosRequest)) { $valores = array('UM' => 'UMA', 'Reales' => $datosRequest['Unidades'], 'Pales' => $datosRequest['Pales'], 'Cajas' => $datosRequest['Cajas'], 'Reservadas' => 0, 'Entrando' => 0); $mvtoSalida = new MvtosAlmacen(); $mvtoEntrada = new MvtosAlmacen(); // Movimiento de salida $ok = $mvtoSalida->genera('MvtoInterno', 'S', 0, $datosRequest['IDAlmacen'], $datosRequest['IDArticulo'], $datosRequest['IDLote'], $datosRequest['IDUbicacion'], 0, $valores); // Movimiento de entrada en la ubicacion destino if ($ok) { $mvtoEntrada->genera('MvtoInterno', 'E', 0, $datosRequest['IDAlmacen'], $datosRequest['IDArticulo'], $datosRequest['IDLote'], $datosRequest['IDUbicacionDestino'], 0, $valores); } unset($mvtoEntrada); unset($mvtoSalida); } else { $this->values['errores'] = $this->errores; } } return $this->IndexAction(); }
/** * Cierra el inventario. * * Consiste en generar los movimientos de almacén necesarios * para dejar las existencias de cada articulo/lote/ubicación * según lo indicado en las líneas de inventario */ public function cierra() { $ok = true; // Si no está cerrado if ($this->Cerrado == 0) { $lineas = new InventariosLineas(); $rows = $lineas->cargaCondicion("*", "IDInventario='{$this->IDInventario}'"); unset($lineas); $exi = new Existencias(); foreach ($rows as $row) { // Buscar la existencias que hay para calcular el mvto // de almacén de tal forma que se queden como dice el inventario $stock = $exi->cargaCondicion("*", "IDAlmacen='{$this->IDAlmacen}' and IDArticulo='{$row['IDArticulo']}' and IDLote='{$row['IDLote']}' and IDUbicacion='{$row['IDUbicacion']}'"); $valores = array('UM' => 'UMA', 'Reales' => $row['Stock'] - $stock[0]['Reales'], 'Pales' => $row['Pales'] - $stock[0]['Pales'], 'Cajas' => $row['Cajas'] - $stock[0]['Cajas'], 'Reservadas' => 0, 'Entrando' => 0); /** if ($valores['Reales']>=0) $signo = "E"; else { $signo = "S"; $valores['Reales'] = abs($valores['Reales']); } */ $signo = "E"; $mvtoAlmacen = new MvtosAlmacen(); $ok = $mvtoAlmacen->genera('InventariosCab', $signo, $this->IDInventario, $this->IDAlmacen, $row['IDArticulo'], $row['IDLote'], $row['IDUbicacion'], 0, $valores); // Valores con los que actualizar } unset($exi); unset($mvtoAlmacen); // Marcar el inventario como cerrado if ($ok) { $this->setCerrado(1); $this->save(); } } return $ok; }