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