/** * * @param string $inventario_id * @param string $producto * @param string $clasifica_fox * @param string $proveedor_id * @param string $variedad_id * @param string $grado_id * @param array $stock * @throws Exception * @return array */ public function actualizarStock($inventario_id, $producto, $clasifica_fox, $proveedor_id, $variedad_id, $grado_id, $tallos_x_bunch, $stock, $usuario_id = null) { $this->getEntityManager()->getConnection()->beginTransaction(); try { $DispoDAO = new DispoDAO(); $GrupoDispoCabDAO = new GrupoDispoCabDAO(); $GrupoDispoDetDAO = new GrupoDispoDetDAO(); $CalidadDAO = new CalidadDAO(); $GrupoDispoDetData = new GrupoDispoDetData(); $DispoDAO->setEntityManager($this->getEntityManager()); $GrupoDispoCabDAO->setEntityManager($this->getEntityManager()); $GrupoDispoDetDAO->setEntityManager($this->getEntityManager()); $CalidadDAO->setEntityManager($this->getEntityManager()); if (empty($proveedor_id)) { //TODAS LAS FINCAS foreach ($stock as $clave => $valor) { $valor = empty($valor) ? 0 : $valor; $DispoDAO->actualizarStock($inventario_id, $producto, $clasifica_fox, $clave, $variedad_id, $grado_id, $tallos_x_bunch, $valor); } //end foreach } else { //UNA SOLA FINCA $stock = $stock[$proveedor_id]; $DispoDAO->actualizarStock($inventario_id, $producto, $clasifica_fox, $proveedor_id, $variedad_id, $grado_id, $tallos_x_bunch, $stock); } //end if //ACTUALIZA EL STOCK DE LOS GRUPOS $tot_stock = $DispoDAO->consultartotalInventario($inventario_id, $producto, $clasifica_fox, $variedad_id, $grado_id, $tallos_x_bunch); $CalidadData = $CalidadDAO->consultarPorClasificaFox($clasifica_fox); $result_dispocab = $GrupoDispoCabDAO->consultarPorInventario($inventario_id, $CalidadData->getId()); foreach ($result_dispocab as $reg_dispocab) { $GrupoDispoDetData->setGrupoDispoCabId($reg_dispocab['id']); $GrupoDispoDetData->setProductoId($producto); $GrupoDispoDetData->setVariedadId($variedad_id); $GrupoDispoDetData->setGradoId($grado_id); $GrupoDispoDetData->setTallosXBunch($tallos_x_bunch); $GrupoDispoDetData->setCantidadBunch($tot_stock['tot_bunch_disponible']); $GrupoDispoDetData->setCantidadBunchDisponible($tot_stock['tot_bunch_disponible']); $GrupoDispoDetData->setUsuarioModId($usuario_id); $GrupoDispoDetData->setUsuarioIngId($usuario_id); $GrupoDispoDetDAO->registrar($GrupoDispoDetData); } //end foreach $result['validacion_code'] = 'OK'; $result['respuesta_mensaje'] = ''; $this->getEntityManager()->getConnection()->commit(); return $result; } catch (Exception $e) { $this->getEntityManager()->getConnection()->rollback(); $this->getEntityManager()->close(); throw $e; } }
/** * * @param DispoData $DispoData * @param array $grados * @param int $color_ventas_id * @param int $calidad_variedad_id */ public function moverStock($DispoData, $grados, $color_ventas_id, $calidad_variedad_id, $clasifica_destino) { $GrupoDispoDetDAO = new GrupoDispoDetDAO(); $DispoDAO = new DispoDAO(); $CalidadDAO = new CalidadDAO(); $GrupoDispoCabDAO = new GrupoDispoCabDAO(); $GrupoDispoDetData = new GrupoDispoDetData(); $GrupoDispoDetDAO->setEntityManager($this->getEntityManager()); $DispoDAO->setEntityManager($this->getEntityManager()); $CalidadDAO->setEntityManager($this->getEntityManager()); $GrupoDispoCabDAO->setEntityManager($this->getEntityManager()); //Se establece el RANGO DE GRADOS al que se va afectar $flag_1era_vez = true; $sql_grados = ''; foreach ($grados as $reg) { if (!$flag_1era_vez) { $sql_grados = $sql_grados . ","; } //end if $sql_grados = $sql_grados . "'" . $reg['grado_id'] . "'"; $flag_1era_vez = false; } //end foreach //Se consulta el registro de la DISPO ORIGEN $sql = " SELECT dispo.* " . " FROM dispo INNER JOIN variedad " . " ON variedad.id \t\t= dispo.variedad_id "; if (!empty($calidad_variedad_id)) { $sql = $sql . " AND variedad.calidad_variedad_id = " . $calidad_variedad_id; } //end if if (!empty($color_ventas_id)) { $sql = $sql . " LEFT JOIN color_ventas " . " ON color_ventas.id \t= dispo.color_ventas_id "; } //end if $sql = $sql . " WHERE dispo.inventario_id \t= '" . $DispoData->getInventarioId() . "'" . " and dispo.producto \t\t\t= '" . $DispoData->getProducto() . "'" . " and dispo.variedad_id\t\t= '" . $DispoData->getVariedadId() . "'" . " and dispo.grado_id \t\t\tin (" . $sql_grados . ")" . " and dispo.tallos_x_bunch \t= " . $DispoData->getTallosxbunch() . "\tand dispo.clasifica\t\t \t= '" . $DispoData->getClasifica() . "'"; $stmt = $this->getEntityManager()->getConnection()->prepare($sql); $stmt->execute(); $result = $stmt->fetchAll(); //Se utiliza el fecth por que es un registro $DispoDataFind = new DispoData(); $DispoDataTarget = new DispoData(); foreach ($result as $reg) { $DispoDataFind->setFecha($reg['fecha']); $DispoDataFind->setInventarioId($reg['inventario_id']); $DispoDataFind->setFechaBunch($reg['fecha_bunch']); $DispoDataFind->setProveedorId($reg['proveedor_id']); $DispoDataFind->setProducto($reg['producto']); $DispoDataFind->setVariedadId($reg['variedad_id']); $DispoDataFind->setGradoId($reg['grado_id']); $DispoDataFind->setTallosxBunch($reg['tallos_x_bunch']); $DispoDataFind->setClasifica($clasifica_destino); $DispoDataSource = $this->consultarPorKey($DispoDataFind); if (empty($DispoDataSource)) { $DispoDataTarget->setFecha($reg['fecha']); $DispoDataTarget->setInventarioId($reg['inventario_id']); $DispoDataTarget->setFechaBunch($reg['fecha_bunch']); $DispoDataTarget->setProveedorId($reg['proveedor_id']); $DispoDataTarget->setProducto($reg['producto']); $DispoDataTarget->setVariedadId($reg['variedad_id']); $DispoDataTarget->setGradoId($reg['grado_id']); $DispoDataTarget->setTallosxBunch($reg['tallos_x_bunch']); $DispoDataTarget->setClasifica($clasifica_destino); $DispoDataTarget->setCantidadBunch($reg['cantidad_bunch']); $DispoDataTarget->setCantidadBunchDisponible($reg['cantidad_bunch_disponible']); $DispoDataTarget->setClasifica($clasifica_destino); $id = $this->ingresar($DispoDataTarget); } else { //Se actualiza la dispo de DESTINO (acumula) $sql = " UPDATE dispo " . " SET cantidad_bunch_disponible = cantidad_bunch_disponible + " . $reg['cantidad_bunch_disponible'] . " WHERE fecha\t\t\t\t= '" . $reg['fecha'] . "'" . "\tand inventario_id \t\t= '" . $reg['inventario_id'] . "'" . " and fecha_bunch\t\t\t= '" . $reg['fecha_bunch'] . "'" . " and proveedor_id\t\t= '" . $reg['proveedor_id'] . "'" . "\tand producto\t\t\t= '" . $reg['producto'] . "'" . " and variedad_id\t\t\t= '" . $reg['variedad_id'] . "'" . "\tand grado_id\t\t\t= " . $reg['grado_id'] . "\tand tallos_x_bunch\t\t= " . $reg['tallos_x_bunch'] . "\tand clasifica\t\t\t= '" . $clasifica_destino . "'"; $count = $this->getEntityManager()->getConnection()->executeUpdate($sql); } //end if //Se resta la dispo de ORIGEN (DISMINUYE) $sql = " UPDATE dispo " . " SET cantidad_bunch_disponible = cantidad_bunch_disponible - " . $reg['cantidad_bunch_disponible'] . " WHERE fecha\t\t\t\t= '" . $reg['fecha'] . "'" . "\tand inventario_id \t\t= '" . $reg['inventario_id'] . "'" . " and fecha_bunch\t\t\t= '" . $reg['fecha_bunch'] . "'" . " and proveedor_id\t\t= '" . $reg['proveedor_id'] . "'" . " and producto\t\t\t= '" . $reg['producto'] . "'" . " and variedad_id\t\t\t= '" . $reg['variedad_id'] . "'" . "\tand grado_id\t\t\t= " . $reg['grado_id'] . "\tand tallos_x_bunch\t\t= " . $reg['tallos_x_bunch'] . "\tand clasifica\t\t\t= '" . $reg['clasifica'] . "'"; $count = $this->getEntityManager()->getConnection()->executeUpdate($sql); //ACTUALIZA EL STOCK DE LOS GRUPOS DESTINO $tot_stock = $DispoDAO->consultartotalInventario($reg['inventario_id'], $reg['producto'], $clasifica_destino, $reg['variedad_id'], $reg['grado_id'], $reg['tallos_x_bunch']); /*if ($tot_stock['tot_cantidad_bunch'] < $tot_stock['tot_bunch_disponible']) { $tot_stock['tot_bunch_disponible'] = $tot_stock['tot_cantidad_bunch']; }//end if */ $CalidadData = $CalidadDAO->consultarPorClasificaFox($clasifica_destino); $result_dispocab = $GrupoDispoCabDAO->consultarPorInventario($reg['inventario_id'], $CalidadData->getId()); foreach ($result_dispocab as $reg_dispocab) { $GrupoDispoDetData->setGrupoDispoCabId($reg_dispocab['id']); $GrupoDispoDetData->setProductoId($reg['producto']); $GrupoDispoDetData->setVariedadId($reg['variedad_id']); $GrupoDispoDetData->setGradoId($reg['grado_id']); $GrupoDispoDetData->setTallosXBunch($reg['tallos_x_bunch']); $GrupoDispoDetData->setCantidadBunch($tot_stock['tot_cantidad_bunch']); $GrupoDispoDetData->setCantidadBunchDisponible($tot_stock['tot_bunch_disponible']); $GrupoDispoDetData->setUsuarioModId(1); $GrupoDispoDetData->setUsuarioIngId(1); $GrupoDispoDetDAO->registrar($GrupoDispoDetData); } //end foreach //ACTUALIZA EL STOCK DE LOS GRUPOS ORIGEN $tot_stock = $DispoDAO->consultartotalInventario($reg['inventario_id'], $reg['producto'], $reg['clasifica'], $reg['variedad_id'], $reg['grado_id'], $reg['tallos_x_bunch']); /*if ($tot_stock['tot_cantidad_bunch'] < $tot_stock['tot_bunch_disponible']) { $tot_stock['tot_bunch_disponible'] = $tot_stock['tot_cantidad_bunch']; }//end if */ $CalidadData = $CalidadDAO->consultarPorClasificaFox($reg['clasifica']); $result_dispocab = $GrupoDispoCabDAO->consultarPorInventario($reg['inventario_id'], $CalidadData->getId()); foreach ($result_dispocab as $reg_dispocab) { $GrupoDispoDetData->setGrupoDispoCabId($reg_dispocab['id']); $GrupoDispoDetData->setProductoId($reg['producto']); $GrupoDispoDetData->setVariedadId($reg['variedad_id']); $GrupoDispoDetData->setGradoId($reg['grado_id']); $GrupoDispoDetData->setTallosXBunch($reg['tallos_x_bunch']); $GrupoDispoDetData->setCantidadBunch($tot_stock['tot_cantidad_bunch']); $GrupoDispoDetData->setCantidadBunchDisponible($tot_stock['tot_bunch_disponible']); $GrupoDispoDetData->setUsuarioModId(1); $GrupoDispoDetData->setUsuarioIngId(1); $GrupoDispoDetDAO->registrar($GrupoDispoDetData); } //end foreach } //end foreach return true; }