public function generarPDF($pedido_cab_id, $salida_archivo_pdf) { $MPDFApp = new MPDFApp(); $PedidoCabDAO = new PedidoCabDAO(); $PedidoDetDAO = new PedidoDetDAO(); $reader = new \Zend\Config\Reader\Ini(); $config = $reader->fromFile('ini/config.ini'); $plantilla_pdf = $config['plantilla_pdf']['dispo']['ruta'] . "pdf_pedido.html"; $plantilla_html = utf8_decode(file_get_contents($plantilla_pdf)); $PedidoCabDAO->setEntityManager($this->getEntityManager()); $PedidoDetDAO->setEntityManager($this->getEntityManager()); //Consulta la cabecera del pedido $reg_pedido_cab = $PedidoCabDAO->consultar($pedido_cab_id, \Application\Constants\ResultType::MATRIZ); //Consulta el detalle del pedido $condiciones = array('pedido_cab_id' => $pedido_cab_id, 'cliente_id' => null); $result_det = $PedidoDetDAO->listado($condiciones); //Inicializa la configuracion //set_time_limit ( 0 ); ini_set('memory_limit', '-1'); //$mpdf=new \mPDF('c', array(210, 297),10,'serif',2,2,30,13,9,9,'L'); $mpdf = new \mPDF('c', array(210, 297), 10, 'serif', 10, 10, 40, 13, 9, 9, 'P'); $mpdf->useSubstitutions = false; $mpdf->simpleTables = true; $mpdf->SetDisplayMode('fullpage'); $html = $plantilla_html; //Fecha Impresion $fec_impresion = \Application\Classes\Fecha::getFechaImpresion(\Application\Classes\Fecha::getFechaHoraActualServidor(), \Application\Classes\Fecha::IMPRESION_FECHA_LARGA); $html = str_replace('$$fec_impresion$$', $fec_impresion, $html); //Numero de Pedido $html = str_replace('$$pedido_cab_id$$', \Application\Classes\Mascara::getNroPedidoFormateado($pedido_cab_id, $config['pedido']['mascara']), $html); //Nombre del Cliente $html = str_replace('$$nombre_cliente$$', $reg_pedido_cab['cliente_nombre'], $html); //Direccion $html = str_replace('$$direccion_cliente$$', $reg_pedido_cab['cliente_direccion'], $html); //Telefono 1 $html = str_replace('$$telefono1_cliente$$', $reg_pedido_cab['cliente_telefono1'], $html); //Fax 1 $html = str_replace('$$fax1_cliente$$', $reg_pedido_cab['cliente_fax1'], $html); //Nombre Marcacion $html = str_replace('$$nombre_marcacion$$', $reg_pedido_cab['marcacion_nombre'], $html); //Nombre Marcacion $html = str_replace('$$direccion_marcacion$$', $reg_pedido_cab['marcacion_direccion'], $html); //Telefono Marcacion $html = str_replace('$$telefono_marcacion$$', $reg_pedido_cab['marcacion_telefono'], $html); //Fecha Ingreso $fec_ingreso = \Application\Classes\Fecha::getFechaImpresion($reg_pedido_cab['fec_ingreso'], \Application\Classes\Fecha::IMPRESION_FECHA_LARGA); $html = str_replace('$$fec_creado$$', $fec_ingreso, $html); //Fecha Confirmado $fec_confirmado = \Application\Classes\Fecha::getFechaImpresion($reg_pedido_cab['fec_confirmado'], \Application\Classes\Fecha::IMPRESION_FECHA_LARGA); $html = str_replace('$$fec_confirmado$$', $fec_confirmado, $html); //Fecha Despacho $fec_despacho = \Application\Classes\Fecha::getFechaImpresion($reg_pedido_cab['fec_despacho'], \Application\Classes\Fecha::IMPRESION_FECHA_CORTA); $html = str_replace('$$fec_despacho$$', $fec_despacho, $html); //Comentario $html = str_replace('$$comentario$$', $reg_pedido_cab['comentario'], $html); $html_det = ''; $total = 0; $tot_eq_fb = 0; foreach ($result_det as $reg) { $format_price_item = '$' . number_format($reg['precio'], 2); $format_total_box = '$' . number_format($reg['total_x_caja'], 2); $format_total = '$' . number_format($reg['total'], 2); $html_det = $html_det . ' <tr> <td>' . $reg['variedad_nombre'] . '</td> <td align="center">' . $reg['grado_id'] . '</td> <td align="center">' . $reg['tallos_x_bunch'] . '</td> <td align="center">' . $reg['tipo_caja_nombre'] . '</td> <td align="center">' . $reg['cantidad_bunch'] / $reg['nro_cajas'] . '</td> <td align="center">' . $reg['nro_cajas'] . '</td> <td align="center">' . $reg['tallos_total'] . '</td> <td align="right">' . $format_price_item . '</td> <td align="right">' . $format_total_box . '</td> <td align="right" >' . $format_total . '</td> <td>' . $reg['marca'] . '</td> </tr> '; $total = $total + $reg['total']; $tot_eq_fb = $tot_eq_fb + $reg['eq_fb']; } //end foreach //Detalles del Pedido $html = str_replace('$$detalle_factura$$', $html_det, $html); //Total Eq FB $html = str_replace('$$eq_fb$$', $tot_eq_fb, $html); //Total del Pedido $total_format = '$' . number_format($total, 2); $html = str_replace('$$total$$', $total_format, $html); $mpdf->WriteHTML($html); if (empty($salida_archivo_pdf)) { $mpdf->Output(); } else { $mpdf->Output($salida_archivo_pdf, 'F'); } //end if return true; }
/** * 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; } */ }