Allow multiple lines of the same SKU at different prices.

master
bleeson 2024-06-17 10:26:44 -07:00
parent cc66d44bd1
commit 3918882d04
2 changed files with 22 additions and 12 deletions

View File

@ -44,7 +44,7 @@ def main():
else: else:
process_files(file) process_files(file)
shutil.move(file, SHIPMENTS_DIRECTORY / file.name) shutil.move(file, SHIPMENTS_DIRECTORY / file.name)
#archives are in the shipping folder # archives are in the shipping folder
combine_zshpords() combine_zshpords()
def sftp_server() -> paramiko.SFTPClient: def sftp_server() -> paramiko.SFTPClient:
@ -131,6 +131,7 @@ def process_files(file): #I am assuming I am getting a sorted csv file by order
# shipzip = row[13] # shipzip = row[13]
tracking = row[16] tracking = row[16]
weight = row[18] weight = row[18]
#pprint.pprint(order_id)
taxes = shopify_order_info[0]['current_total_tax']#row[22] taxes = shopify_order_info[0]['current_total_tax']#row[22]
ship_charge = shopify_order_info[0]['shipping_lines__price']#row[21] ship_charge = shopify_order_info[0]['shipping_lines__price']#row[21]
discount = shopify_order_info[0]['current_total_discounts']#row[24] discount = shopify_order_info[0]['current_total_discounts']#row[24]
@ -148,7 +149,7 @@ def process_files(file): #I am assuming I am getting a sorted csv file by order
line_qty = row[3] line_qty = row[3]
line_lot = row[4] line_lot = row[4]
line_price = row[20] line_price = row[20]
shopify_item_data = get_item_from_shopify_order(shopify_order_info, line_product) shopify_item_data = get_item_from_shopify_order(shopify_order_info, line_product, line_price)
sales_order.append( sales_order.append(
SalesOrderDetail( SalesOrderDetail(
itmref=shopify_item_data['sku'],#line_product, itmref=shopify_item_data['sku'],#line_product,
@ -163,9 +164,9 @@ def process_files(file): #I am assuming I am getting a sorted csv file by order
sales_order.output(import_file) sales_order.output(import_file)
def get_item_from_shopify_order(line_item_list, product): def get_item_from_shopify_order(line_item_list, product, gropri):
for record in line_item_list: for record in line_item_list:
if record['sku'] == product: if record['sku'] == product and str(record['price']).rstrip('0') == gropri:
return record return record
return None return None
@ -181,7 +182,7 @@ def get_details_from_shopify(order):
,[ecommerce_shipped_orders].[shipping_lines__price] ,[ecommerce_shipped_orders].[shipping_lines__price]
,[ecommerce_shipped_order_lines].[sku] ,[ecommerce_shipped_order_lines].[sku]
,[ecommerce_shipped_order_lines].[quantity] ,[ecommerce_shipped_order_lines].[quantity]
,[ecommerce_shipped_order_lines].[price] ,[ecommerce_shipped_order_lines].[price]
from [staging].[dbo].[ecommerce_shipped_orders] from [staging].[dbo].[ecommerce_shipped_orders]
left join [staging].[dbo].[ecommerce_shipped_order_lines] left join [staging].[dbo].[ecommerce_shipped_order_lines]
on [ecommerce_shipped_orders].[id] = [ecommerce_shipped_order_lines].[id] on [ecommerce_shipped_orders].[id] = [ecommerce_shipped_order_lines].[id]
@ -402,12 +403,14 @@ class SalesOrderDetailList:
""" """
itmref = salesorder_detail.itmref itmref = salesorder_detail.itmref
qty = salesorder_detail.qty qty = salesorder_detail.qty
if itmref in self._item_set: gropri = salesorder_detail.gropri
set_item = itmref + '_' + str(gropri)
if set_item in self._item_set:
for detail in self._details: for detail in self._details:
if detail.itmref == itmref: if detail.itmref+'_'+str(detail.gropri) == set_item:
detail.qty += qty detail.qty += qty
else: else:
self._item_set.add(itmref) self._item_set.add(set_item)
self._details.append(salesorder_detail) self._details.append(salesorder_detail)
def __iter__(self): def __iter__(self):

View File

@ -57,7 +57,7 @@ def find_so_from_po(cust_po):
""" """
select select
SOHNUM_0 SOHNUM_0
from PROD.SORDER from [PROD].SORDER
where where
SOHTYP_0 = 'WEB' SOHTYP_0 = 'WEB'
and BPCORD_0 = 'STSHOPIFY' and BPCORD_0 = 'STSHOPIFY'
@ -120,6 +120,7 @@ def process_files(file):
sohnum=sohnum, sohnum=sohnum,
itmref=line_product, itmref=line_product,
qty=int(line_qty), qty=int(line_qty),
gropri=line_price,
), ),
subdetail, subdetail,
) )
@ -176,6 +177,7 @@ class WarehouseShipmentDetail:
subdetails: typing.List[WarehouseShipmentSubDetail] = dataclasses.field( subdetails: typing.List[WarehouseShipmentSubDetail] = dataclasses.field(
default_factory=list default_factory=list
) )
gropri: decimal.Decimal = decimal.Decimal() #to match against when multiple of the same skus are used
def append(self, subdetail: WarehouseShipmentSubDetail): def append(self, subdetail: WarehouseShipmentSubDetail):
""" """
@ -238,9 +240,11 @@ class WarehouseShipmentDetail:
where where
[SOP].[SOHNUM_0] = :sohnum [SOP].[SOHNUM_0] = :sohnum
and [SOP].[ITMREF_0] = :itmref and [SOP].[ITMREF_0] = :itmref
and [SOP].[GROPRI_0] = :gropri
""", """,
sohnum=self.sohnum, sohnum=self.sohnum,
itmref=self.itmref, itmref=self.itmref,
gropri=self.gropri,
) )
.first() .first()
.how_many .how_many
@ -256,11 +260,13 @@ class WarehouseShipmentDetail:
where where
[SOP].[SOHNUM_0] = :sohnum [SOP].[SOHNUM_0] = :sohnum
and [SOP].[ITMREF_0] = :itmref and [SOP].[ITMREF_0] = :itmref
and [SOP].[GROPRI_0] = :gropri
order by order by
[SOP].[SOPLIN_0] [SOP].[SOPLIN_0]
""", """,
sohnum=self.sohnum, sohnum=self.sohnum,
itmref=self.itmref, itmref=self.itmref,
gropri=self.gropri,
).first() ).first()
else: else:
pprint.pprint(self.sohnum) pprint.pprint(self.sohnum)
@ -464,12 +470,13 @@ class WarehouseShipmentDetailList:
Append Append
""" """
itmref = shipment_detail.itmref itmref = shipment_detail.itmref
if itmref in self._item_set: set_item = itmref+'_'+str(shipment_detail.gropri)
if set_item in self._item_set:
for detail in self._details: for detail in self._details:
if detail == itmref: if detail.itmref+'_'+str(detail.gropri) == set_item:
detail.subdetails.append(shipment_subdetail) detail.subdetails.append(shipment_subdetail)
return return
self._item_set.add(itmref) self._item_set.add(set_item)
shipment_detail.fill() shipment_detail.fill()
shipment_detail.append(shipment_subdetail) shipment_detail.append(shipment_subdetail)
self._details.append(shipment_detail) self._details.append(shipment_detail)