
    όiv                          d dl Z  G d d      Zy)    Nc                   8    e Zd Zedefd       Zedefd       Zy)ImportHelperrowc                 ,   g }g d}|D ]F  }| j                  |      }|t        |      j                         dk(  s3|j                  d|        H t        | j                  d      xs d      j                         }t        | j                  d      xs d      j                         }|s|s|j                  d       t        | j                  d      xs d      j                         }|r't	        j
                  d|      s|j                  d	       |S )
u0  
        Kiểm tra tính hợp lệ của từng dòng đơn hàng.
        Theo logic mới:
        - orderId KHÔNG còn là trường bắt buộc
        - backend sẽ tự sinh orderId cuối cùng
        - mỗi dòng cần đủ dữ liệu để backend gộp theo customer + address
        )customeritemsaddress u    Thiếu trường bắt buộc: 	productIdstyleu)   Thiếu trường bắt buộc: productIdemailz[^@]+@[^@]+\.[^@]+u&   Định dạng Email không hợp lệ)getstrstripappendrematch)r   errorsrequired_fieldsfieldvalue
product_idr   r   s           4/var/www/pod-logistic/pod-api/utils/import_helper.pyvalidate_rowzImportHelper.validate_row   s      ;$ 	JEGGENE}E
 0 0 2b 8 @HI	J -34::<
CGGG$*+113%MMEF CGGG$*+113"7?MMBC    c                    | j                  d      xs | j                  d      xs d}| j                  d      xs | j                  d      xs d}| j                  d      xs | j                  d      xs d}| j                  d      xs | j                  d	      xs d}| j                  d
      xs( | j                  d      xs | j                  d      xs d}| j                  d      xs | j                  d      xs d}| j                  d      xs | j                  d      xs d}| j                  d      xs | j                  d      xs d}| j                  d      xs( | j                  d      xs | j                  d      xs d}	| j                  d      xs | j                  d      xs d}
||||	|
g}dj                  |D cg c]5  }t        |      j                         st        |      j                         7 c}      }i dt        |      j                         dt        | j                  d      xs( | j                  d      xs | j                  d      xs d      j                         dt        | j                  d      xs | j                  d      xs d      j                         dt        |      j                         d| d | d!| d"j                         d#|d$| j                  d%      xs | j                  d$      xs dd&| j                  d&d      xs ddt        |      j                         d|d'| j                  d(d)      xs | j                  d'd)      xs d)d*| j                  d+d)      xs | j                  d*d)      xs d)d,| j                  d-d)      xs | j                  d,d)      xs d)d.| j                  d/      xs | j                  d.      xs dd	t        |      j                         d0| j                  d1      xs | j                  d0      xs dd2d3S c c}w )4u   
        Map các cột từ file Excel thực tế sang schema hệ thống cần.
        Giữ orderId là optional nếu file người dùng có cung cấp.
        Nếu không có, backend sẽ tự sinh.
        zOrder IDorderIdr
   toNamer   Styler   SizesizeQTYQtyquantity   	toStreet1streettoCitycitytoStatestatetoZipzipCodezip	toCountrycountryz, r   SKUskuproductNamezProduct Namer   z - z (Qty: )r	   phonePhoner   pricePricer   shippingShippingtaxTaxcolorColordesignz
Design URLstatusUnpaid)r   joinr   r   )r   order_idr   r   r!   qtyr'   r)   r+   zip_coder0   address_partspartr	   s                 r   map_excel_to_schemaz ImportHelper.map_excel_to_schema%   s    77:&B#'')*<B778$A
(;Ar :CGGG$4:wwv7#''&/7RggenJJ#''*2EJ%@):@bwwx 9CGGFO9r	"<cggg&6<"777#Qswwy'9QSWWU^Qr''+&B#'')*<Buh@))=^4CPTIOOL]SY__.^_
s8}**,
SWWU^[swwu~[AU[Y[\bbd
 3sww~6V#''-:PVTVW]]_
 H++-	

 wc$wse15;;=
 w
 SWWW%?)9?R
 SWWWb)/R
 SZ%%'
 
 SWWWa(DCGGGQ,?D1
 
A.M#''*a2HMA
 3775!$>q(9>Q
 SWWW%?)9?R
 CIOO%
  cggl+Fswwx/@FB!
" h#
 	
 _s   Q,QN)__name__
__module____qualname__staticmethoddictr   rH    r   r   r   r      s6    $  > (
 (
 (
r   r   )r   r   rN   r   r   <module>rO      s    	J
 J
r   