Last active 1716781910

Order.php Raw
1// Order.php modified for dropshipping / API:
2
3<?php
4
5namespace Encodigoweb\Woocommerce\Handlers;
6
7use Encodigoweb\Woocommerce\Repository\OrderRepository;
8use Exception;
9use WC_Customer;
10
11final class Order extends Handler
12{
13 public function __construct()
14 {
15 parent::__construct();
16
17 $this->log_context = ['source' => 'Order'];
18
19 $this->apis = ['order'];
20
21 $this->order_repository = new OrderRepository();
22 }
23
24 public function process()
25 {
26 $this->logger->info('Inicio sincronización pedidos', $this->log_context);
27
28 $posts = $this->order_repository->getOrders();
29
30 if (!empty($posts))
31 {
32 foreach ($posts as $post)
33 {
34 $response = $this->sendOrder($post);
35 }
36 }
37 else
38 {
39 $this->logger->info('No hay pedidos para procesar', $this->log_context);
40
41 echo 'No hay pedidos para procesar';
42 }
43
44 $this->logger->info('Fin sincronización pedidos', $this->log_context);
45
46 echo 'Proceso Terminado';
47 }
48
49 public function sendOrder($post)
50 {
51 $xml = $this->generateXml($post);
52
53 $api_config = $this->config['apis'][$this->apis[0]];
54
55 $api = new Api($api_config);
56
57 $result = $api->callApi($xml);
58
59 if ($result['response'] === true){
60 $this->order_repository->insertOrder($post->ID);
61
62 $this->logger->info('Pedido '.$post->ID.' enviado correctamente', $this->log_context);
63 }else{
64 $this->logger->error('Pedido '.$post->ID.' '.$result['msg'], $this->log_context);
65 }
66 }
67
68 public function generateXml($post)
69 {
70 $order = wc_get_order($post->ID);
71
72 $items = $order->get_items();
73
74 $order_lines = '';
75
76 foreach ($items as $item)
77 {
78 $product = wc_get_product($item->get_product_id());
79
80 $total_line_tax_excl = round($item->get_subtotal(), 2);
81
82 $total_line_tax_incl = round($item->get_subtotal() + $item->get_subtotal_tax(), 2);
83
84 $order_lines .= '<linea>
85 <EcomPedidoId>'.$item->get_order_id().'</EcomPedidoId>
86 <EcomNumLineaId>'.$item->get_id().'</EcomNumLineaId>
87 <ProductoReferencia>'.$product->get_sku().'</ProductoReferencia>
88 <Cantidad>'.$item->get_quantity().'</Cantidad>
89 <Importe>'.$total_line_tax_excl.'</Importe>
90 <ImporteConIva>'.$total_line_tax_incl.'</ImporteConIva>
91 </linea>';
92 }
93
94 $user_id = $order->get_customer_id();
95 $customer = new WC_Customer($user_id);
96
97 // Get the company name from the user's profile
98 $company_name = get_user_meta($user_id, 'billing_company', true);
99
100 // Get the _nif meta key value from the user's profile
101 $nif = get_user_meta($user_id, '_nif', true);
102
103 $country_billing = $order->get_billing_country();
104 $state_billing = $order->get_billing_state();
105 $billing_state_name = WC()->countries->get_states($country_billing)[$state_billing];
106
107 $country_shipping = $order->get_shipping_country();
108 $state_shipping = $order->get_shipping_state();
109 $shipping_state_name = WC()->countries->get_states($country_shipping)[$state_shipping];
110
111 $total_tax_excl = round($order->get_subtotal(), 2);
112
113 $total_tax_incl = round($order->get_total(), 2);
114
115 $xml = '<?xml version="1.0"?>
116 <pedido>
117 <CabeceraPedido>
118 <EcomPedidoId>'.$order->get_id().'</EcomPedidoId>
119 <CustomerId>'.$user_id.'</CustomerId>
120 <CustomerName>'.$company_name.'</CustomerName>
121 <CustomerCIF>'.$nif.'</CustomerCIF>
122 <CustomerMail>'.$order->get_billing_email().'</CustomerMail>
123 <CustomerTelefono>'.$order->get_billing_phone().'</CustomerTelefono>
124 <CustomerPais>'.$country_billing.'</CustomerPais>
125 <DirFactId>'.$order->get_id().'</DirFactId>
126 <DirFactNombre>'.$company_name.'</DirFactNombre>
127 <DirFactDireccion>'.$order->get_billing_address_1().' '.$order->get_billing_address_2().'</DirFactDireccion>
128 <DirFactCodigoPostal>'.$order->get_billing_postcode().'</DirFactCodigoPostal>
129 <DirFactPoblacion>'.$order->get_shipping_city().'</DirFactPoblacion>
130 <DirFactProvincia>'.$billing_state_name.'</DirFactProvincia>
131 <DirFactProvinciaCodigo>'.$state_billing.'</DirFactProvinciaCodigo>
132 <DirFactPais>'.$country_billing.'</DirFactPais>
133 <DirFactTelefono>'.$order->get_billing_phone().'</DirFactTelefono>
134 <DirFactMail>'.$order->get_billing_email().'</DirFactMail>
135 <DirFactCIF>'.$nif.'</DirFactCIF>
136 <DirEnvId>'.$order->get_id().'</DirEnvId>
137 <DirEnvNombre>'.$order->get_shipping_first_name().' '.$order->get_shipping_last_name().'</DirEnvNombre>
138 <DirEnvDireccion>'.$order->get_shipping_address_1().' '.$order->get_shipping_address_2().'</DirEnvDireccion>
139 <DirEnvCodigoPostal>'.$order->get_shipping_postcode().'</DirEnvCodigoPostal>
140 <DirEnvPoblacion>'.$order->get_shipping_city().'</DirEnvPoblacion>
141 <DirEnvProvincia>'.$shipping_state_name.'</DirEnvProvincia>
142 <DirEnvProvinciaCodigo>'.$state_shipping.'</DirEnvProvinciaCodigo>
143 <DirEnvPais>'.$country_shipping.'</DirEnvPais>
144 <DirEnvTelefono>'.$order->get_billing_phone().'</DirEnvTelefono>
145 <DirEnvMail>'.$order->get_billing_email().'</DirEnvMail>
146 <DirEnvCIF>'.$nif.'</DirEnvCIF>
147 <EcomTotalGastosEnvio>'.$order->get_shipping_total().'</EcomTotalGastosEnvio>
148 <Importe>'.$total_tax_excl.'</Importe>
149 <ImporteConIva>'.$total_tax_incl.'</ImporteConIva>
150 <MetodoPago>DEPOSITO</MetodoPago>
151 </CabeceraPedido>
152 <LineasPedido>
153 '.$order_lines.'
154 </LineasPedido>
155 </pedido>';
156
157 return $xml;
158 }
159}
160