public function grabarMasivoStock($inventario_id, $clasifica, $proveedor_id, $grado_id, $cadena_color_ventas_ids, $cadena_calidad_variedad_ids, $porcentaje, $valor, $usuario_id) { $this->getEntityManager()->getConnection()->beginTransaction(); try { $DispoDAO = new DispoDAO(); //$GrupoDispoDetDAO = new GrupoDispoDetDAO(); $DispoData = new DispoData(); //$GrupoDispoDetData = new GrupoDispoDetData(); //$GrupoDispoDetDAO->setEntityManager($this->getEntityManager()); $DispoDAO->setEntityManager($this->getEntityManager()); $campo_grado_dispogen = $grado_id; if ($porcentaje != 0) { $condiciones = array("sin_fecha" => false, 'sin_fecha_bunch' => false, "inventario_id" => $inventario_id, "proveedor_id" => $proveedor_id, "clasifica" => $clasifica, "cadena_color_ventas_ids" => $cadena_color_ventas_ids, "cadena_calidad_variedad_ids" => $cadena_calidad_variedad_ids); $result = $DispoDAO->consultarDetallado($condiciones); foreach ($result as $reg) { /*$DispoData->setId ($reg['id']);*/ $DispoData->setFecha($reg['fecha']); $DispoData->setInventarioId($reg['inventario_id']); $DispoData->setFechaBunch($reg['fecha_bunch']); $DispoData->setProveedorId($reg['proveedor_id']); $DispoData->setProducto($reg['producto']); $DispoData->setVariedadId($reg['variedad_id']); $DispoData->setGradoId($campo_grado_dispogen); $DispoData->setTallosxBunch($reg['tallos_x_bunch']); $DispoData->setClasifica($reg['clasifica']); $cantidad_bunch = floor($reg[$campo_grado_dispogen] * $porcentaje / 100); $DispoData->setCantidadBunch($cantidad_bunch); $DispoData->setCantidadBunchDisponible($cantidad_bunch); list($accion, $key) = $DispoDAO->registrarBunchDisponibles($DispoData); } //end foreach } else { /** * Debemos de realizar la consulta de manera agrupada sin la fecha y fecha_bunch, * para saber si disminuimos o aumentamos el stock de acuerdo al valor */ $condiciones = array("sin_fecha" => true, 'sin_fecha_bunch' => true, "inventario_id" => $inventario_id, "proveedor_id" => $proveedor_id, "clasifica" => $clasifica, "cadena_color_ventas_ids" => $cadena_color_ventas_ids, "cadena_calidad_variedad_ids" => $cadena_calidad_variedad_ids); $result = $DispoDAO->consultarDetallado($condiciones); foreach ($result as $reg) { $saldo_valor = $valor; $condiciones = array('sin_fecha' => false, 'sin_fecha_bunch' => false, 'inventario_id' => $reg['inventario_id'], 'proveedor_id' => $reg['proveedor_id'], 'producto' => $reg['producto'], 'variedad_id' => $reg['variedad_id'], 'tallos_x_bunch' => $reg['tallos_x_bunch'], 'clasifica' => $clasifica); $result_detalle = $DispoDAO->consultarDetallado($condiciones); foreach ($result_detalle as $reg_detalle) { if ($reg[$campo_grado_dispogen] < $valor) { $DispoData->setFecha($reg_detalle['fecha']); $DispoData->setInventarioId($reg_detalle['inventario_id']); $DispoData->setFechaBunch($reg_detalle['fecha_bunch']); $DispoData->setProveedorId($reg_detalle['proveedor_id']); $DispoData->setProducto($reg_detalle['producto']); $DispoData->setVariedadId($reg_detalle['variedad_id']); $DispoData->setGradoId($campo_grado_dispogen); $DispoData->setTallosxBunch($reg_detalle['tallos_x_bunch']); $DispoData->setClasifica($reg_detalle['clasifica']); $diferencia = $saldo_valor - $reg[$campo_grado_dispogen]; $cantidad_bunch = $reg_detalle[$campo_grado_dispogen] + $diferencia; $DispoData->setCantidadBunch($cantidad_bunch); $DispoData->setCantidadBunchDisponible($cantidad_bunch); list($accion, $key) = $DispoDAO->registrarBunchDisponibles($DispoData); break; //SALE DEL FOR, ya que lo incremento } else { if ($reg[$campo_grado_dispogen] > $valor) { $DispoData->setFecha($reg_detalle['fecha']); $DispoData->setInventarioId($reg_detalle['inventario_id']); $DispoData->setFechaBunch($reg_detalle['fecha_bunch']); $DispoData->setProveedorId($reg_detalle['proveedor_id']); $DispoData->setProducto($reg_detalle['producto']); $DispoData->setVariedadId($reg_detalle['variedad_id']); $DispoData->setGradoId($campo_grado_dispogen); $DispoData->setTallosxBunch($reg_detalle['tallos_x_bunch']); $DispoData->setClasifica($reg_detalle['clasifica']); if ($reg_detalle[$campo_grado_dispogen] > $saldo_valor) { $cantidad_bunch = $saldo_valor; $saldo_valor = 0; } else { $cantidad_bunch = 0; $saldo_valor = $saldo_valor - $reg_detalle[$campo_grado_dispogen]; } //end if $DispoData->setCantidadBunch($cantidad_bunch); $DispoData->setCantidadBunchDisponible($cantidad_bunch); list($accion, $key) = $DispoDAO->registrarBunchDisponibles($DispoData); /*if ($saldo_valor == 0) { break; //SALE DEL FOR, porque ya no se tiene saldo para disminuir }//end if*/ } else { //NO HACE NADA EN ESTE CASO } } } //end foreach } //end foreach } //end if $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; }