/** * * @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; }