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; } }