getPedidoClientePresupuesto($pedido_id); $data_xml['pedido_presupuesto_direcciones'] = $pedidoModel->getPedidoPresupuestoDirecciones($pedido_id); $data_xml['pedido_presupuesto_lineas'] = $pedidoModel->getPedidoPresupuestoLineas($pedido_id); $servicios = $presupuestoModel->getServiciosPresupuesto($data_xml['pedido_cliente_presupuesto']->presupuestoId); $data_xml['servicios'] = $servicios; $data_xml['preimpresion'] = PedidoXMLService::parse_servicio_preimpresion($servicios['preimpresion']); $data_xml["acabado"] = PedidoXMLService::parse_servicio_acabado($servicios['acabado']); $data_xml["binding"] = PedidoXMLService::get_binding_code($data_xml['pedido_cliente_presupuesto']->codigoTipoImpresion,$data_xml['pedido_cliente_presupuesto']->solapas); return $data_xml; } protected static function parse_servicio_acabado(array $data_xml_servicios_acabado) { $xml_element = []; $service_xml_key_value = [ "ShrinkWrapping" => fn($nombre) => str_contains($nombre,"retractilado"), "Finish" => fn($nombre) => str_contains($nombre,"brillo"), "PlakeneT" =>fn($nombre) => str_contains($nombre,"plakene traslúcido"),]; foreach($data_xml_servicios_acabado as $servicio_acabado) { $service_name = strtolower($servicio_acabado->nombre); foreach ($service_xml_key_value as $key => $value) { $xml_element[$key] = $value($service_name) ? 1 : 0 ; } } return $xml_element; } protected static function parse_servicio_preimpresion(array $data_xml_servicios_preimpresion) { $xml_element = []; $service_xml_key_value = [ "Urgent" => fn($nombre) => str_contains($nombre,"Pedido urgente"), "Prototype" => fn($nombre) => str_contains($nombre,"Prototipo"), "Layout" =>fn($nombre) => str_contains($nombre,"Maquetación"), "Correction" =>fn($nombre) => str_contains($nombre,"Corrección ortográfica"), // "Review" =>fn($nombre) => str_contains($nombre,"Revisión Profesional de archivo"), "Design" =>fn($nombre) => str_contains($nombre,'Diseño de Cubierta'), ]; foreach($data_xml_servicios_preimpresion as $servicio_pre) { $service_name = $servicio_pre->nombre; foreach ($service_xml_key_value as $key => $value) { $value_service = $value($service_name) ? 1 : 0 ; if( $value_service){ $xml_element[$key] = $servicio_pre->precio ; }else if(!isset($xml_element[$key])){ $xml_element[$key] = $value_service; } } } return $xml_element; } public static function generate_xml($pedido_id) { $papel_formato_ancho = 0; $papel_formato_alto = 0; $data = PedidoXMLService::get_pedido_presupuesto($pedido_id); $xml = new DOMDocument('1.0', 'utf-8'); $xml_order_el = $xml->createElement('Order'); $xml_header_el = $xml->createElement('Header'); $offset_pedido_id = env('XML_OFFSET_CUSTOMER_ID',1000000) + $data["pedido_cliente_presupuesto"]->pedidoId; $xml_header_el->appendChild($xml->createElement('CustomerCode', $data["pedido_cliente_presupuesto"]->presupuestoClienteId)); $xml_header_el->appendChild($xml->createElement('CodeNode', env('NODE_CODE_XML','SFK'))); $xml_header_el->appendChild($xml->createElement('ExternId', $offset_pedido_id)); $xml_header_el->appendChild($xml->createElement('NumProducts', 1)); $xml_header_el->appendChild($xml->createElement('Date', now_db())); $xml_order_el->appendChild($xml_header_el); $xml_products_el = $xml->createElement('Products'); $xml_product_el = $xml->createElement('Product'); $xml_product_el->appendChild($xml->createElement('ItemId', $offset_pedido_id)); $xml_product_el->appendChild($xml->createElement('Quantity', $data["pedido_cliente_presupuesto"]->tirada)); $xml_product_el->appendChild($xml->createElement('Title', $data["pedido_cliente_presupuesto"]->titulo)); $xml_product_el->appendChild($xml->createElement('Pages', $data["pedido_cliente_presupuesto"]->paginas)); $xml_product_el->appendChild($xml->createElement('Reprint', $data["pedido_cliente_presupuesto"]->inc_rei ?? 0)); if ($data["pedido_cliente_presupuesto"]->papel_formato_personalizado) { $papel_formato_ancho = $data["pedido_cliente_presupuesto"]->papelAnchoPersonalidado; $papel_formato_alto = $data["pedido_cliente_presupuesto"]->papelAltoPersonalidado; } else { $papel_formato_ancho = $data["pedido_cliente_presupuesto"]->lgPapelFormatoAncho; $papel_formato_alto = $data["pedido_cliente_presupuesto"]->lgPapelFormatoAlto; } $xml_product_el->appendChild($xml->createElement('Width', $papel_formato_ancho)); $xml_product_el->appendChild($xml->createElement('Height', $papel_formato_alto)); $presupuestoLineaTipoCubierta = null; $xml_presupuesto_lineas_el = $xml->createElement('Lines'); ## Iterate throught presupuesto_lineas foreach ($data["pedido_presupuesto_lineas"] as $row) { if (str_contains($row->tipo, "rot") || str_contains($row->tipo, "bn") || str_contains($row->tipo, "color")) { $colorInterior = PedidoXMLService::get_color_interior($row); $xmlInside = $xml->createElement('Inside'); $xmlInside->appendChild($xml->createElement('TypeOfPrint', $colorInterior)); $xmlInside->appendChild($xml->createElement('HQ', str_contains($row->tipo, 'hq') ? 1 : 0)); $xmlInside->appendChild($xml->createElement('Pages', $row->paginas)); $xmlInside->appendChild($xml->createElement('Paper', $row->papelCode)); $xmlInside->appendChild($xml->createElement('Weight', $row->gramaje)); $xml_presupuesto_lineas_el->appendChild($xmlInside); } else if (str_contains($row->tipo, "lp_cubierta") ) {//|| str_contains($row->tipo, "sobrecubierta") //? If both exists presupuestoLineaTipoCubierta is override by sobreCubierta making null and not adding $papelCubiertaCode = $row->papelCode; $papelCubiertaGramaje = $row->gramaje; $presupuestoLineaTipoCubierta = $row->tipo == "lp_cubierta" ? $row : null; } } $xml_product_el->appendChild($xml_presupuesto_lineas_el); if ($presupuestoLineaTipoCubierta) { $containsTarifaAcabadoBrillo = isset($data['acabado']['Finish']) ? true : false; if ($containsTarifaAcabadoBrillo) { $acabado = "brillo"; } else { $acabado = "mate"; } $xmlCover = $xml->createElement('Cover'); $xmlCover->appendChild($xml->createElement('Sides', $presupuestoLineaTipoCubierta->paginas / 2)); $xmlCover->appendChild($xml->createElement('Paper', $presupuestoLineaTipoCubierta->papelCode)); $xmlCover->appendChild($xml->createElement('Weight', $presupuestoLineaTipoCubierta->gramaje)); $xmlCover->appendChild($xml->createElement('Flaps', $data["pedido_cliente_presupuesto"]->solapas)); $xmlCover->appendChild($xml->createElement('WidthFlaps', $data["pedido_cliente_presupuesto"]->solapas_ancho)); $xmlCover->appendChild($xml->createElement('Finish', $acabado)); $xml_product_el->appendChild($xmlCover); } $xml_product_el->appendChild($xml->createElement('Binding', $data['binding'])); $xml_services_el = $xml->createElement('Services'); $xml_services_el->appendChild($xml->createElement('Bookmark', $data["pedido_cliente_presupuesto"]->marcapaginas)); foreach ($data['preimpresion'] as $key => $value) { $xml_services_el->appendChild($xml->createElement($key, $value)); } foreach ($data['acabado'] as $key => $value) { $xml_services_el->appendChild($xml->createElement($key, $value)); } $xml_product_el->appendChild($xml_services_el); $xml_envios_el = $xml->createElement('Shipments'); foreach ($data["pedido_presupuesto_direcciones"] as $pedido_presupuesto_direccion) { $xml_envio_el = $xml->createElement('Shipment'); $xml_envio_el->appendChild($xml->createElement('Qty', $pedido_presupuesto_direccion->cantidad)); $xml_envio_el->appendChild($xml->createElement('Price', $pedido_presupuesto_direccion->precio)); $xml_envio_el->appendChild($xml->createElement('Attention', $pedido_presupuesto_direccion->att)); $xml_envio_el->appendChild($xml->createElement('Email', $pedido_presupuesto_direccion->email)); $xml_envio_el->appendChild($xml->createElement('Address', $pedido_presupuesto_direccion->direccion)); $xml_envio_el->appendChild($xml->createElement('Province', $pedido_presupuesto_direccion->provincia)); $xml_envio_el->appendChild($xml->createElement('City', $pedido_presupuesto_direccion->municipio)); $xml_envio_el->appendChild($xml->createElement('Zip', $pedido_presupuesto_direccion->cp)); $xml_envio_el->appendChild($xml->createElement('CountryCode', $pedido_presupuesto_direccion->paisCode3)); $xml_envio_el->appendChild($xml->createElement('Telephone', $pedido_presupuesto_direccion->telefono)); $xml_envios_el->appendChild($xml_envio_el); } $xml_product_el->appendChild($xml_envios_el); $xml_product_el->appendChild($xml->createElement('Comments', $data["pedido_cliente_presupuesto"]->comentarios_safekat)); $xml_product_el->appendChild($xml->createElement('CommentsClient', $data["pedido_cliente_presupuesto"]->comentarios_cliente)); $xml_products_el->appendChild($xml_product_el); $xml_order_el->appendChild($xml_products_el); $xml->appendChild($xml_order_el); $file_has_suffix = hash('sha512',$offset_pedido_id); $file_name = PedidoXMLService::generate_xml_file_name($file_has_suffix); $ftp = new SafekatFtpClient(); $ftp->uploadXML($xml->saveXML(),$file_name); return $data; } protected static function generate_xml_file_name(string $hash) : string { return implode("",["SafekatNew_",$hash,".xml"]); } protected static function get_binding_code(string $tipo_impresion_nombre,bool $solapas) : ?string { $solapa = $solapas ? '1' : '0'; $key = implode("_",[$tipo_impresion_nombre,$solapa]); $xml_mapping_binding = [ "libroFresadoTapaBlanda_0" => 'RF', "libroFresadoTapaBlanda_1" => 'RFS', "libroCosidoTapaBlanda_0" => 'RCHV', "libroCosidoTapaBlanda_1" => 'RCHVS', "libroGrapado_0" => 'CC2', "libroGrapado_1" => 'CC2S', "libroCosidoTapaDura_0" => 'TDC', "libroCosidoTapaDura_1" => 'TDC', "libroFresadoTapaDura_0" => 'RDF', "libroFresadoTapaDura_1" => 'RDF', "libroEspiralTapaBlanda_0" => 'ESP', "libroEspiralTapaBlanda_1" => 'ESP', "libroWireoTapaBlanda_0" => 'WIO', "libroWireoTapaBlanda_1" => 'WIO', ]; return $xml_mapping_binding[$key] ?? null; } protected static function get_color_interior($pre_linea): ?string { $color_interior = null; $bn_tipo_array = ['lp_bn', 'lp_bnhq', 'lp_rot_bn']; $color_tipo_array = ['lp_color', 'lp_color_hq', 'lp_rot_color']; if (in_array($pre_linea->tipo, $bn_tipo_array)) { $color_interior = "bn"; }; if (in_array($pre_linea->tipo, $color_tipo_array)) { $color_interior = "color"; }; return $color_interior; } }