Last active 1716781910

Malin's Avatar Malin revised this gist 1716781909. Go to revision

1 file changed, 159 insertions

Order.php(file created)

@@ -0,0 +1,159 @@
1 + // Order.php modified for dropshipping / API:
2 +
3 + <?php
4 +
5 + namespace Encodigoweb\Woocommerce\Handlers;
6 +
7 + use Encodigoweb\Woocommerce\Repository\OrderRepository;
8 + use Exception;
9 + use WC_Customer;
10 +
11 + final 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 + }
Newer Older