/** * Obtiene la dispo * * @param string $cliente_id * @param int $usuario_id * @param int $marcacion_sec * @param string $tipo_caja_id * @param string $variedad_id * @param int $grado_id * @param boolean $get_fincas * @param boolean $rebajar_cajas_pedido * @param string $producto_id * @param int $tallos_x_bunch * @return array */ function getDispo($cliente_id, $usuario_id, $marcacion_sec, $tipo_caja_id = null, $variedad_id = null, $grado_id = null, $get_fincas = false, $rebajar_cajas_pedido = true, $validar_variedad_faltante = false, $producto_id = null, $tallos_x_bunch = null) { $UsuarioDAO = new UsuarioDAO(); $DispoDAO = new DispoDAO(); $TipoCajaMatrizDAO = new TipoCajaMatrizDAO(); $PedidoDetDAO = new PedidoDetDAO(); $VariedadDAO = new VariedadDAO(); /* $this->getEntityManager()->getConnection()->beginTransaction(); try { */ $UsuarioDAO->setEntityManager($this->getEntityManager()); $DispoDAO->setEntityManager($this->getEntityManager()); $TipoCajaMatrizDAO->setEntityManager($this->getEntityManager()); $PedidoDetDAO->setEntityManager($this->getEntityManager()); $VariedadDAO->setEntityManager($this->getEntityManager()); /** * Consulta el GRUPO_DISPO_CAB_ID del usuario de cliente */ $row_usuario = $UsuarioDAO->consultar($usuario_id, \Application\Constants\ResultType::MATRIZ); if (empty($row_usuario)) { //'Usuario no tiene asignado un grupo' $result = array('respuesta_code' => '01', 'respuesta_msg' => '00 - Availability Unassigned, please contact to your executive'); return $result; } else { $grupo_precio_cab_id = $row_usuario['grupo_precio_cab_id']; //MORONITOR $grupo_dispo_cab_id = $row_usuario['grupo_dispo_cab_id']; $inventario_id = $row_usuario['inventario_id']; $clasifica_fox = $row_usuario['clasifica_fox']; $calidad_id = $row_usuario['calidad_id']; } //end if /** * Se obtiene el inventario para el cliente por proveedor y tipo de inventario especifico, * por lo que dara los bunches disponibles, y posteriormente si existe una * RESTRICCION en GRUPO_DISPO se aplica la regla para la dispo por grupo */ if (empty($inventario_id)) { //Usuario no tiene inventario, comuniquese con su asesor $result = array('respuesta_code' => '02', 'respuesta_msg' => '01 - Stock unloaded, please contact to your executive'); return $result; } //end if if (empty($clasifica_fox)) { //'Calidad no tiene clasifica_fox, comuniquese con su asesor' $result = array('respuesta_code' => '02', 'respuesta_msg' => '02 - Settings unloaded, please contact to your executive'); return $result; } //end if if (empty($grupo_precio_cab_id)) { //'Usuario no tiene asignado GRUPO PRECIO, comuniquese con su asesor' $result = array('respuesta_code' => '02', 'respuesta_msg' => '03 - Price unloaded, please contact to your executive'); return $result; } //end if if (empty($grupo_dispo_cab_id)) { //Usuario no tiene asignado GRUPO DISPO, comuniquese con su asesor $result = array('respuesta_code' => '02', 'respuesta_msg' => '04 - Stock unloaded, please contact to your executive'); return $result; } //end if if ($row_usuario['inventario_id'] != $row_usuario['grupo_precio_cab_inventario_id']) { //INCOMPATIBILIDAD DE CONFIGURACION DE POLITICA DE INVENTARIO (GRUPO PRECIO) $result = array('respuesta_code' => 'NO-CONFIG-INV-PRECIO', 'respuesta_msg' => '05 - Stock unloaded, please contact to your executive'); return $result; } //end if if ($row_usuario['inventario_id'] != $row_usuario['grupo_dispo_cab_inventario_id']) { //INCOMPATIBILIDAD DE CONFIGURACION DE POLITICA DE INVENTARIO (GRUPO DISPO) $result = array('respuesta_code' => 'NO-CONFIG-INV-DISPO', 'respuesta_msg' => '06 - Stock unloaded, please contact to your executive'); return $result; } //end if if ($row_usuario['calidad_id'] != $row_usuario['grupo_precio_cab_calidad_id']) { //INCOMPATIBILIDAD DE CONFIGURACION DE POLITICA DE CALIDAD (GRUPO PRECIO) $result = array('respuesta_code' => 'NO-CONFIG-CAL-PRECIO', 'respuesta_msg' => '07 - Settings unloaded, please contact to your executive'); return $result; } //end if if ($row_usuario['calidad_id'] != $row_usuario['grupo_dispo_cab_calidad_id']) { //INCOMPATIBILIDAD DE CONFIGURACION DE POLITICA DE CALIDAD (GRUPO DISPO) $result = array('respuesta_code' => 'NO-CONFIG-CAL-DISPO', 'respuesta_msg' => '08 - Settings unloaded, please contact to your executive'); return $result; } //end if $result = $DispoDAO->consultarInventarioPorUsuario($usuario_id, $producto_id, $variedad_id, $grado_id, $clasifica_fox); /** *Ajusta el stock de los bunch de las fincas para mostrar la dispo de acuerdo al GRUPO_DISPO_DET *se debe de hacer un quiebre por producto, variedad, grado, tallos_x_bunch y finca, para ajustar la dispo segun las restricciones */ $producto_id_ant = null; $variedad_id_ant = null; $grado_id_ant = null; $tallos_x_bunch_ant = null; $grupo_dispo_det_cantidad_bunch_disponible = 0; //while($row = $result->fetch_array(MYSQLI_ASSOC)) if (empty($result)) { if ($validar_variedad_faltante) { $VariedadData = $VariedadDAO->consultar($variedad_id); $result = array('respuesta_code' => '12', 'respuesta_msg' => 'Do not exist any box of: ' . $tipo_caja_id . ' ' . $VariedadData->getNombre() . ' ' . $grado_id . ' cm'); unset($VariedadData); return $result; } //end if } //end if $result_dispo = null; foreach ($result as $row) { if ($row['variedad_id'] == 'ALB' && $row['grado_id'] == '60') { $debug = 1; } //end if //$porcentaje = 100/100; if (empty($row['grupo_dispo_det_cantidad_bunch_disponible'])) { $tot_bunch_disponibles = 0; /*------------------------------------*/ if (empty($tot_bunch_disponibles)) { if ($validar_variedad_faltante) { //$VariedadData = $VariedadDAO->consultar($variedad_id); $result = array('respuesta_code' => '13', 'respuesta_msg' => 'Do not exist any box of: ' . $tipo_caja_id . ' ' . $row['variedad_nombre'] . ' ' . $grado_id . ' cm'); //unset($VariedadData); return $result; } //end if } //end if /*------------------------------------*/ //$porcentaje = $row['grupo_dispo_det_cantidad_bunch_disponible']/100; } else { if ($row['grupo_dispo_det_cantidad_bunch_disponible'] > $row['tot_bunch_disponible']) { $tot_bunch_disponibles = $row['tot_bunch_disponible']; } else { $tot_bunch_disponibles = $row['grupo_dispo_det_cantidad_bunch_disponible']; } } //end if if ($row['precio'] == 0) { continue; //MORONITOR } //Si varia la variedad_id y el grado_id se indica la cantidad de bunch disponibles del GRUPO DISPO if ($producto_id_ant != $row['producto_id'] || $variedad_id_ant != $row['variedad_id'] || $grado_id_ant != $row['grado_id'] || $tallos_x_bunch_ant != $row['tallos_x_bunch']) { if (empty($row['grupo_dispo_det_cantidad_bunch_disponible'])) { $grupo_dispo_det_cantidad_bunch_disponible = 0; } else { $grupo_dispo_det_cantidad_bunch_disponible = $row['grupo_dispo_det_cantidad_bunch_disponible']; } //end if $producto_id_ant = $row['producto_id']; $variedad_id_ant = $row['variedad_id']; $grado_id_ant = $row['grado_id']; $tallos_x_bunch_ant = $row['tallos_x_bunch']; } //end if $grupo_dispo_det_cantidad_bunch_disponible_ant = $grupo_dispo_det_cantidad_bunch_disponible; //configura la cantidad de bunch de la FINCA en relacion del GRUPO DISPO if ($grupo_dispo_det_cantidad_bunch_disponible > $row['tot_bunch_disponible']) { $tot_bunch_disponibles = $row['tot_bunch_disponible']; $grupo_dispo_det_cantidad_bunch_disponible = $grupo_dispo_det_cantidad_bunch_disponible - $row['tot_bunch_disponible']; } else { $tot_bunch_disponibles = $grupo_dispo_det_cantidad_bunch_disponible; $grupo_dispo_det_cantidad_bunch_disponible = 0; } //end if if (!empty($tot_bunch_disponibles)) { $row_dispo = $row; $row_dispo['producto_id'] = $row_dispo['producto_id']; $row_dispo['variedad_nombre'] = trim($row_dispo['variedad_nombre']); $row_dispo['proveedor_id'] = $row_dispo['proveedor_id']; $row_dispo['variedad_id'] = $row_dispo['variedad_id']; $row_dispo['grado_id'] = $row_dispo['grado_id']; //$row_dispo['tallos_x_bunch'] = $row_dispo['tallos_x_bunch']; $row_dispo['precio'] = $row_dispo['precio']; $row_dispo['precio_oferta'] = $row_dispo['precio_oferta']; $row_dispo['grupo_dispo_det_cantidad_bunch_disponible'] = $grupo_dispo_det_cantidad_bunch_disponible_ant; //$row_dispo['tot_bunch_disponible'] = floor($row_dispo['tot_bunch_disponible']*$porcentaje); $row_dispo['tot_bunch_disponible'] = $tot_bunch_disponibles; $row_dispo['tallos_x_bunch'] = $row_dispo['tot_tallos_x_bunch'] / $row_dispo['veces_tallos_x_bunch']; $row_dispo['color_nombre'] = $row_dispo['color_nombre']; $row_dispo['url_ficha'] = $row_dispo['url_ficha']; //Los siguientes se llenaran más adelante $row_dispo['tipo_caja_origen_estado'] = NULL; $row_dispo['tipo_caja_origen_id'] = NULL; $row_dispo['tipo_caja_unds_bunch'] = NULL; $row_dispo['nro_cajas'] = NULL; $result_dispo[] = $row_dispo; } //end if } //end foreach if (empty($result_dispo)) { $result = array('respuesta_code' => '08', 'respuesta_msg' => 'Dispo unavailable'); return $result; //NO HAY DISPO } foreach ($result_dispo as &$row_dispo) { $row = $TipoCajaMatrizDAO->consultaPorInventarioPorMarcacionPorVariedadPorGrado($inventario_id, $marcacion_sec, $row_dispo['variedad_id'], $row_dispo['grado_id'], $tipo_caja_id); if (!empty($row)) { //echo("<pre>");var_dump($row);echo("</pre>"); //DEBUG $row_dispo['tipo_caja_id'] = $row['tipo_caja_id']; $row_dispo['tipo_caja_origen_estado'] = $row['tipo_caja_origen_estado']; $row_dispo['tipo_caja_origen_id'] = $row['tipo_caja_origen_id']; $row_dispo['tipo_caja_unds_bunch'] = $row['tipo_caja_unds_bunch']; $row_dispo['tallos_x_bunch'] = $row_dispo['tallos_x_bunch']; //MEJORA POR LOS BUNCHS if (empty($row['tipo_caja_unds_bunch'])) { $row_dispo['nro_cajas'] = 0; } else { $row_dispo['nro_cajas'] = floor($row_dispo['tot_bunch_disponible'] / $row['tipo_caja_unds_bunch']); } //end if //obtiene la dispo por proveedores if ($get_fincas == true) { $row_dispo_temp = null; $row_dispo_temp['proveedor_id'] = $row_dispo['proveedor_id']; $row_dispo_temp['tot_bunch_disponible'] = $row_dispo['tot_bunch_disponible']; $row_dispo_temp['nro_cajas'] = $row_dispo['nro_cajas']; $proveedores_dispo[] = $row_dispo_temp; } //end if } else { $result = array('respuesta_code' => '03', 'respuesta_msg' => $row_dispo['variedad_nombre'] . ' ' . $row_dispo['grado_id'] . ' cm variety have not ' . $tipo_caja_id . ' box available'); //throw new Exception('Error, no tiene caja disponible'); return $result; } //end if } //end foreach /** * Consolida las cajas de los proveedores (a nivel FINCAS) */ $result_consolidado = NULL; $bd_1era_vez = true; $producto_id_ant = NULL; $variedad_id_ant = NULL; $grado_id_ant = NULL; $tallos_x_bunch_ant = NULL; //echo("<pre>");var_dump($result_dispo);echo("</pre>"); exit foreach ($result_dispo as $row) { if ($bd_1era_vez == true || $producto_id_ant != $row['producto_id'] || $variedad_id_ant != $row['variedad_id'] || $grado_id_ant != $row['grado_id'] || $tallos_x_bunch_ant != $row['tallos_x_bunch']) { if ($bd_1era_vez == false) { if (!empty($row_new['nro_cajas'])) { $key = $producto_id_ant . '-' . $variedad_id_ant . '-' . trim($grado_id_ant) . '-' . $tallos_x_bunch_ant; $result_consolidado[$key] = $row_new; } //end if } //end if $bd_1era_vez = false; //Inicializa los campos totalizadores $row_new = NULL; $row_new['nro_cajas'] = 0; $row_new['tot_bunch_disponible'] = 0; } //end if //Se totaliza el registro $row_new['producto_id'] = $row['producto_id']; $row_new['inventario_id'] = $inventario_id; $row_new['grado_id'] = $row['grado_id']; $row_new['variedad_id'] = $row['variedad_id']; $row_new['variedad_nombre'] = $row['variedad_nombre']; $row_new['tipo_caja_id'] = $row['tipo_caja_id']; $row_new['tipo_caja_origen_estado'] = $row['tipo_caja_origen_estado']; $row_new['tipo_caja_origen_id'] = $row['tipo_caja_origen_id']; $row_new['cantidad_bunch'] = $row['tipo_caja_unds_bunch']; $row_new['tipo_caja_default_id'] = $tipo_caja_id; $row_new['nro_cajas'] = $row_new['nro_cajas'] + $row['nro_cajas']; $row_new['tot_bunch_disponible'] = $row_new['tot_bunch_disponible'] + $row['tot_bunch_disponible']; $row_new['tallos_x_bunch'] = $row['tallos_x_bunch']; $row_new['color_nombre'] = $row['color_nombre']; $row_new['url_ficha'] = $row['url_ficha']; $row_new['precio'] = $row['precio']; $row_new['precio_oferta'] = $row['precio_oferta']; //Control para el quiebre $producto_id_ant = $row['producto_id']; $variedad_id_ant = $row['variedad_id']; $grado_id_ant = $row['grado_id']; $tallos_x_bunch_ant = $row['tallos_x_bunch']; } //end foreach if ($bd_1era_vez == false) { if (!empty($row_new['nro_cajas'])) { $key = $producto_id_ant . '-' . $variedad_id_ant . '-' . trim($grado_id_ant) . '-' . $tallos_x_bunch_ant; $result_consolidado[$key] = $row_new; } //end if } //end if /** * Consulta todos los pedido del cliente en estado comprando * para poder homologar las cajas para poderlas restar del stock */ $result = $PedidoDetDAO->consultarPedidosEstadoComprando($cliente_id, $inventario_id, $producto_id, $variedad_id, $grado_id, $tallos_x_bunch, $calidad_id); //Ajusta el porcentaje de acuerdo a la restriccion de GRUPO_DISPO //var_dump($result_consolidado); $nro_cajas = 0; foreach ($result as $row) { $key = $row['producto_id'] . '-' . $row['variedad_id'] . '-' . trim($row['grado_id']) . '-' . $row['tallos_x_bunch']; $row_consolidado =& $result_consolidado[$key]; if ($rebajar_cajas_pedido == true) { $nro_cajas_homologada = $PedidoDetDAO->getCajasHomologadaPedido($inventario_id, $cliente_id, $marcacion_sec, $row['variedad_id'], $row['grado_id'], "C", $row_consolidado['tipo_caja_id'], $row['tallos_x_bunch'], $calidad_id); } else { $nro_cajas_homologada = 0; } $row_consolidado['nro_cajas'] = $row_consolidado['nro_cajas'] - $nro_cajas_homologada; if ($row_consolidado['nro_cajas'] < 0) { $row_consolidado['nro_cajas'] = 0; } //end if } //end foreach /** * Se quita el key del array, para que no afecte al pasarlo por JSON */ $result_consolidado2 = null; if (!empty($result_consolidado)) { foreach ($result_consolidado as $reg) { if ($reg['nro_cajas'] > 0) { $result_cajas = $TipoCajaMatrizDAO->consultarTipoCajaPorInventarioPorVariedadPorGrado($inventario_id, $reg['variedad_id'], $reg['grado_id']); $cajas = null; foreach ($result_cajas as $row_caja) { $cajas[] = $row_caja['tipo_caja_id']; } //end while $reg['cajas'] = $cajas; //obtiene la dispo por proveedores if ($get_fincas == true) { $reg['proveedores_dispo'] = $proveedores_dispo; } //end if $result_consolidado2[] = $reg; } //end if } //end foreach } //end if //$this->getEntityManager()->getConnection()->commit(); $result = array('respuesta_code' => 'OK', 'respuesta_msg' => '', 'result_dispo' => $result_consolidado2); //return $result_consolidado2; /* echo('<pre>'); var_dump($result); echo('</pre>'); die(); */ return $result; /* } catch (Exception $e) { $this->getEntityManager()->getConnection()->rollback(); $this->getEntityManager()->close(); throw $e; } */ }
/** * Confirma el pedido y rebaja el inventario correspondiente de las fincas * con sus respectivas validaciones * * @param int $pedido_cab_id * @param int $usuario_id * @throws PedidoException * @throws Exception * @return array> */ public function confirmar($pedido_cab_id, $usuario_cliente_id, $usuario_vendedor_id) { $PedidoDetDAO = new PedidoDetDAO(); $PedidoCabDAO = new PedidoCabDAO(); $PedidoProveedorDAO = new PedidoProveedorDAO(); $GrupoDispoCabDAO = new GrupoDispoCabDAO(); $DispoDAO = new DispoDAO(); $GrupoDispoDetDAO = new GrupoDispoDetDAO(); $DispoBO = new DispoBO(); $UsuarioDAO = new UsuarioDAO(); $ParametrizarDAO = new ParametrizarDAO(); $PedidoProveedorData = new PedidoProveedorData(); $this->getEntityManager()->getConnection()->beginTransaction(); try { if (empty($usuario_vendedor_id)) { $usuario_procesa_id = $usuario_cliente_id; } else { $usuario_procesa_id = $usuario_vendedor_id; } //end if $PedidoCabDAO->setEntityManager($this->getEntityManager()); $PedidoDetDAO->setEntityManager($this->getEntityManager()); $GrupoDispoCabDAO->setEntityManager($this->getEntityManager()); $PedidoProveedorDAO->setEntityManager($this->getEntityManager()); $DispoDAO->setEntityManager($this->getEntityManager()); $GrupoDispoDetDAO->setEntityManager($this->getEntityManager()); $DispoBO->setEntityManager($this->getEntityManager()); $UsuarioDAO->setEntityManager($this->getEntityManager()); $ParametrizarDAO->setEntityManager($this->getEntityManager()); /** * Consulta datos relacionados al usuario */ $row_usuario = $UsuarioDAO->consultar($usuario_cliente_id, \Application\Constants\ResultType::MATRIZ); if (empty($row_usuario)) { throw new PedidoException('Usuario no tiene asignado un grupo!!'); } else { /* $grupo_precio_cab_id= $row_usuario['grupo_precio_cab_id']; //MORONITOR $grupo_dispo_cab_id = $row_usuario['grupo_dispo_cab_id']; $inventario_id = $row_usuario['inventario_id']; */ $clasifica_fox = $row_usuario['clasifica_fox']; $calidad_id = $row_usuario['calidad_id']; } //end if $PedidoCabData = $PedidoCabDAO->consultar($pedido_cab_id); if ($PedidoCabData->getEstado() == \Application\Constants\Pedido::ESTADO_ACTIVO) { throw new PedidoException('El pedido ya fue procesado anteriormente!!'); } //end if /** * Consulta el GRUPO_DISPO_CAB_ID del usuario del cliente */ $GrupoDispoCabData = $GrupoDispoCabDAO->consultarPorUsuarioId($usuario_cliente_id); if (empty($GrupoDispoCabData)) { throw new PedidoException('Usuario no tiene asignado un grupo de dispo!!'); } //end foreach /** * Se obtiene los detalles de los pedidos, siempre y cuando el estado de la CABECERA DEL PEDIDO * este en estado COMPRANDO, por tema de seguridad se pregunta este estado en el QUERY */ $result_pedido = $PedidoDetDAO->consultarPorPedidoCabId($pedido_cab_id, \Application\Constants\Pedido::ESTADO_COMPRANDO); if (empty($result_pedido)) { throw new PedidoException('No existe detalle para el pedido!!'); } //end if /* * 2. Verificar si existe el stock en las fincas, * en caso de estar incompleto el stock devolver lo que este disponible sin grabar */ $arr_novedad_pedido_det = array(); //En caso de tener registro en este array, significa que no existe stock para ese detalle $bd_rollback = false; foreach ($result_pedido as $reg_pedido) { /** * Obtiene la dispo Actual */ $result_dispo_actual = $DispoBO->getDispo($reg_pedido['cliente_id'], $usuario_cliente_id, $reg_pedido['marcacion_sec'], $reg_pedido['tipo_caja_id'], $reg_pedido['variedad_id'], $reg_pedido['grado_id'], true, false, true, $reg_pedido['variedad_producto_id'], $reg_pedido['tallos_x_bunch']); if (empty($result_dispo_actual)) { throw new PedidoException('Dispo Vacia, no es posible confirmar el pedido'); } //end if switch ($result_dispo_actual['respuesta_code']) { case 'OK': $reg_dispo_actual = $result_dispo_actual["result_dispo"][0]; break; case 12: //Sin registro en el inventario del grupo del cliente //Sin registro en el inventario del grupo del cliente case 13: //Sin stock en el grupo del cliente $reg_dispo_actual['nro_cajas'] = 0; //Se emula que la dispo Actual tiene CERO cajas. break; default: $this->getEntityManager()->getConnection()->rollback(); $result = array('respuesta' => $result_dispo_actual['respuesta_code'], 'respuesta_descripcion' => $result_dispo_actual['respuesta_msg'], 'novedades_pedido_det' => null); return $result; } //end switch if ($reg_pedido['nro_cajas'] > $reg_dispo_actual['nro_cajas']) { $bd_rollback = true; $reg_pedido['nro_cajas_en_stock'] = $reg_dispo_actual['nro_cajas']; $arr_novedad_pedido_det[] = $reg_pedido; } else { /* * 2. Grabar el Pedido de las Fincas */ $pedido_nro_cajas = $reg_pedido['nro_cajas']; foreach ($reg_dispo_actual['proveedores_dispo'] as $proveedor_dispo) { if ($pedido_nro_cajas > $proveedor_dispo['nro_cajas']) { $nro_cajas = $proveedor_dispo['nro_cajas']; $pedido_nro_cajas = $pedido_nro_cajas - $nro_cajas; } else { $nro_cajas = $pedido_nro_cajas; $pedido_nro_cajas = 0; } //end if $cantidad_bunchs = $nro_cajas * $reg_dispo_actual['cantidad_bunch']; $tallos_total = $cantidad_bunchs * $reg_dispo_actual['tallos_x_bunch']; $total = $tallos_total * $reg_dispo_actual['precio']; //Se crea la Data para PedidoProveedorData $PedidoProveedorData = new PedidoProveedorData(); $PedidoProveedorData->setPedidoCabId($reg_pedido['pedido_cab_id']); $PedidoProveedorData->setPedidoDetSec($reg_pedido['pedido_det_sec']); $PedidoProveedorData->setProveedorId($proveedor_dispo['proveedor_id']); $PedidoProveedorData->setNroCajas($nro_cajas); $PedidoProveedorData->setCantidadBunch($cantidad_bunchs); $PedidoProveedorData->setTallosxBunch($reg_pedido['tallos_x_bunch']); $PedidoProveedorData->setTallosTotal($tallos_total); $PedidoProveedorData->setVariedadId($reg_pedido['variedad_id']); $PedidoProveedorData->setGradoId($reg_pedido['grado_id']); $PedidoProveedorData->setPrecio($reg_pedido['precio']); $PedidoProveedorData->setTotal($total); //Equivalencias de Caja FB $cajas_fb = \Application\Classes\CajaConversion::equivalenciaFB($reg_pedido['tipo_caja_id'], $nro_cajas); $PedidoProveedorData->setEqFb($cajas_fb); $key_pedidoproveedor = $PedidoProveedorDAO->ingresar($PedidoProveedorData); /* * 3. Rebaja de la DISPO GENERAL */ $result_dispo = $DispoDAO->consultarInventarioPorProveedor($proveedor_dispo['proveedor_id'], $reg_dispo_actual['inventario_id'], $reg_dispo_actual['producto_id'], $reg_dispo_actual['variedad_id'], $reg_dispo_actual['grado_id'], $reg_dispo_actual['tallos_x_bunch'], $clasifica_fox); //$result_dispo = null; if (empty($result_dispo)) { throw new PedidoException('No hay bunches disponibles en la DISPO - FINCA'); } //end if $total_bunch_pedido = $cantidad_bunchs; foreach ($result_dispo as $row_dispo) { if ($row_dispo['cantidad_bunch_disponible'] > $total_bunch_pedido) { $cantidad_descontar = $total_bunch_pedido; $total_bunch_pedido = 0; } else { $cantidad_descontar = $row_dispo['cantidad_bunch_disponible']; $total_bunch_pedido = $total_bunch_pedido - $row_dispo['cantidad_bunch_disponible']; } //end if //REBAJA DE LA DISPO $DispoData = new DispoData(); $DispoData->setFecha($row_dispo['fecha']); $DispoData->setInventarioId($row_dispo['inventario_id']); $DispoData->setFechaBunch($row_dispo['fecha_bunch']); $DispoData->setProveedorId($row_dispo['proveedor_id']); $DispoData->setProducto($row_dispo['producto']); $DispoData->setVariedadId($row_dispo['variedad_id']); $DispoData->setGradoId($row_dispo['grado_id']); $DispoData->setTallosxBunch($row_dispo['tallos_x_bunch']); $DispoData->setClasifica($clasifica_fox); //NUEVO $DispoDAO->rebajar($DispoData, $cantidad_descontar); //REBAJA DE LA DISPO POR GRUPO $DispoGrupoDetData = new GrupoDispoDetData(); $DispoGrupoDetData->setGrupoDispoCabId($GrupoDispoCabData->getId()); $DispoGrupoDetData->setProductoId($row_dispo['producto']); $DispoGrupoDetData->setVariedadId($row_dispo['variedad_id']); $DispoGrupoDetData->setGradoId($row_dispo['grado_id']); $DispoGrupoDetData->setTallosXBunch($row_dispo['tallos_x_bunch']); $GrupoDispoDetDAO->rebajar($DispoGrupoDetData, $cantidad_descontar); if ($total_bunch_pedido == 0) { break; //SALE DEL WHILE } //end if } //end while if ($pedido_nro_cajas == 0) { break; //Sale del ciclo foreach } } //end foreach list($key_pedidocab, $reg_pedidocab) = $PedidoCabDAO->actualizarEstado($pedido_cab_id, \Application\Constants\Pedido::ESTADO_ACTIVO, $usuario_procesa_id); } //end if //CONTROL DE bd_rollback } //end foreach if ($bd_rollback == true) { $this->getEntityManager()->getConnection()->rollback(); $result = array('respuesta' => 'NOVEDAD', 'novedades_pedido_det' => $arr_novedad_pedido_det, 'nro_dias_procesa' => '', 'dia_semana_procesa' => ''); } else { /*-------------Indica los dias que debe que se procesan---*/ $reg_despacho = $ParametrizarDAO->getDiaDespacho($reg_pedidocab['fec_confirmado']); $PedidoCabDAO->actualizarFechaDespacho($pedido_cab_id, $reg_despacho['fecha_procesa']); $this->getEntityManager()->getConnection()->commit(); $this->enviarEmailAdjuntoPDF($pedido_cab_id); /*--------------Devuelve el resultado --------------------*/ $result = array('respuesta' => 'OK', 'novedades_pedido_det' => '', 'nro_dias_procesa' => $reg_despacho['nro_dias_procesa'], 'dia_semana_procesa' => $reg_despacho['dia_semana_procesa']); } //end if return $result; } catch (Exception $e) { $this->getEntityManager()->getConnection()->rollback(); $this->getEntityManager()->close(); throw $e; } //end try }
public function generarExcel($condiciones) { set_time_limit(0); ini_set('memory_limit', '-1'); $UsuarioDAO = new UsuarioDAO(); $UsuarioDAO->setEntityManager($this->getEntityManager()); //----------------Se configura las Etiquetas de Seleccion----------------- $texto_criterio_busqueda = ''; $texto_estado = 'TODOS'; $texto_perfil = 'TODOS'; if (!empty($condiciones['criterio_busqueda'])) { $texto_criterio_busqueda = $condiciones['criterio_busqueda']; } //end if switch ($condiciones['estado']) { case 'A': $texto_estado = 'ACTIVO'; break; case 'I': $texto_estado = 'INACTIVO'; break; } //end switch switch ($condiciones['perfil_id']) { case '2': $texto_perfil = 'VENDEDOR'; break; case '3': $texto_perfil = 'ADMINISTRADOR'; break; } //end switch //----------------Se inicia la configuracion del PHPExcel----------------- $PHPExcelApp = new PHPExcelApp(); $objPHPExcel = new \PHPExcel(); // Set document properties $PHPExcelApp->setUserName(''); $PHPExcelApp->setMetaDataDocument($objPHPExcel); $objPHPExcel->setActiveSheetIndex(0); //Configura el tamaño del Papel $objPHPExcel->getActiveSheet()->getPageSetup()->setOrientation(\PHPExcel_Worksheet_PageSetup::ORIENTATION_LANDSCAPE); $objPHPExcel->getActiveSheet()->getPageSetup()->setPaperSize(\PHPExcel_Worksheet_PageSetup::PAPERSIZE_A4); //Se establece la escala de la pagina $objPHPExcel->getActiveSheet()->getPageSetup()->setFitToWidth(1); $objPHPExcel->getActiveSheet()->getPageSetup()->setFitToHeight(0); //Se establece los margenes de la pagina $objPHPExcel->getActiveSheet()->getPageMargins()->setTop(0.1); $objPHPExcel->getActiveSheet()->getPageMargins()->setRight(0.1); $objPHPExcel->getActiveSheet()->getPageMargins()->setLeft(0.1); $objPHPExcel->getActiveSheet()->getPageMargins()->setBottom(0.1); //------------------------------Registra la cabecera-------------------------------- $row = 1; $col_ini = $PHPExcelApp->getNameFromNumber(0); $col_fin = $PHPExcelApp->getNameFromNumber(5); $objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow(0, 1, "Lista de Usuarios"); $objPHPExcel->getActiveSheet()->mergeCells($col_ini . $row . ':' . $col_fin . $row); $objPHPExcel->getActiveSheet()->getStyle($col_ini . $row . ':' . $col_fin . $row)->applyFromArray($PHPExcelApp->getStyleArray($PHPExcelApp::STYLE_ARRAY_NEGRILLA)); $objPHPExcel->getActiveSheet()->getStyle($col_ini . $row . ':' . $col_fin . $row)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER); //------------------------------Registra criterios linea 1-------------------------- $row = 2; $col_ini = $PHPExcelApp->getNameFromNumber(0); $col_fin = $PHPExcelApp->getNameFromNumber(5); $objRichText = new \PHPExcel_RichText(); $objRichText->createText(''); $objCriterio = $objRichText->createTextRun('Criterio: '); $objCriterio->getFont()->setBold(true); $objCriterio->getFont()->setColor(new \PHPExcel_Style_Color(\PHPExcel_Style_Color::COLOR_DARKGREEN)); $objRichText->createText($texto_criterio_busqueda); $objEstado = $objRichText->createTextRun(' Estado: '); $objEstado->getFont()->setBold(true); $objEstado->getFont()->setColor(new \PHPExcel_Style_Color(\PHPExcel_Style_Color::COLOR_DARKGREEN)); $objRichText->createText($texto_estado); $objPerfil = $objRichText->createTextRun(' Perfil: '); $objPerfil->getFont()->setBold(true); $objPerfil->getFont()->setColor(new \PHPExcel_Style_Color(\PHPExcel_Style_Color::COLOR_DARKGREEN)); $objRichText->createText($texto_perfil); $objPHPExcel->getActiveSheet()->getCell($col_ini . $row)->setValue($objRichText); $objPHPExcel->getActiveSheet()->mergeCells($col_ini . $row . ':' . $col_fin . $row); //------------------------------ Registro de Fecha de Generacion -------------------------------- $row = 3; $col_ini = $PHPExcelApp->getNameFromNumber(0); $col_fin = $PHPExcelApp->getNameFromNumber(5); //$etiqueta = ""; $objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow(0, $row, "Generado: " . \Application\Classes\Fecha::getFechaHoraActualServidor()); $objPHPExcel->getActiveSheet()->mergeCells($col_ini . $row . ':' . $col_fin . $row); $objPHPExcel->getActiveSheet()->getStyle($col_ini . $row)->applyFromArray($PHPExcelApp->getStyleArray($PHPExcelApp::STYLE_ARRAY_NEGRILLA)); $objPHPExcel->getActiveSheet()->getStyle($col_ini . $row)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_RIGHT); //---------------------------IMPRIME TITULO DE COLUMNA----------------------------- $row = $row + 1; $row_detalle_ini = $row; $objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow(0, $row, "Nro"); $objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow(1, $row, "Nombre"); $objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow(2, $row, "Usuario"); $objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow(3, $row, "Login Fox"); $objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow(4, $row, "Correo"); $objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow(5, $row, "Perfil"); //----------------------AUTO DIMENSIONAR CELDAS DE ACUERDO AL CONTENIDO--------------- $objPHPExcel->getActiveSheet()->getColumnDimensionByColumn(0)->setAutoSize(true); $objPHPExcel->getActiveSheet()->getColumnDimensionByColumn(1)->setAutoSize(true); $objPHPExcel->getActiveSheet()->getColumnDimensionByColumn(2)->setAutoSize(true); $objPHPExcel->getActiveSheet()->getColumnDimensionByColumn(3)->setAutoSize(true); $objPHPExcel->getActiveSheet()->getColumnDimensionByColumn(4)->setAutoSize(true); $objPHPExcel->getActiveSheet()->getColumnDimensionByColumn(5)->setAutoSize(true); $objPHPExcel->getActiveSheet()->getStyle($col_ini . $row . ':' . $col_fin . $row)->applyFromArray($PHPExcelApp->getStyleArray($PHPExcelApp::STYLE_ARRAY_NEGRILLA)); $objPHPExcel_getActiveSheet = $objPHPExcel->getActiveSheet(); //----------------------CONSULTA LOS REGISTROS A EXPORTAR--------------- $result = $this->listado($condiciones); $cont_linea = 0; foreach ($result as $reg) { $reg['nombre'] = trim($reg['nombre']); $reg['username'] = trim($reg['username']); $reg['login_fox'] = trim($reg['login_fox']); $reg['email'] = trim($reg['email']); $cont_linea++; $row = $row + 1; $objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow(0, $row, $cont_linea); $objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow(1, $row, $reg['nombre']); $objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow(2, $row, $reg['username']); $objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow(3, $row, $reg['login_fox']); $objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow(4, $row, $reg['email']); $objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow(5, $row, $reg['perfil_nombre']); } // end foreach //Margenes $col_ini = $PHPExcelApp->getNameFromNumber(0); $col_fin = $PHPExcelApp->getNameFromNumber(5); $objPHPExcel->getActiveSheet()->getStyle($col_ini . $row_detalle_ini . ":" . $col_fin . $row)->applyFromArray($PHPExcelApp->getStyleArray($PHPExcelApp::STYLE_ARRAY_BORDE_TODO)); // Rename worksheet $objPHPExcel->getActiveSheet()->setTitle('Listado Usuarios'); $PHPExcelApp->save($objPHPExcel, $PHPExcelApp::FORMAT_EXCEL_2007, "ListadoUsuarios.xlsx"); }