now excel is working
This commit is contained in:
11
main.py
11
main.py
@@ -78,12 +78,19 @@ if __name__ == '__main__':
|
|||||||
help='The name of the requested chain',
|
help='The name of the requested chain',
|
||||||
choices=chain_dict.keys(),
|
choices=chain_dict.keys(),
|
||||||
)
|
)
|
||||||
|
parser.add_argument('--type',
|
||||||
|
choices=("excel", "csv"),
|
||||||
|
default='excel',
|
||||||
|
|
||||||
|
help="a switch flag to set set the output file to a CSV file",
|
||||||
|
required=False,
|
||||||
|
)
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
|
file_type = '.xlsx' if not args.type or args.type == 'excel' else '.csv'
|
||||||
chain: SupermarketChain = chain_dict[args.chain]
|
chain: SupermarketChain = chain_dict[args.chain]
|
||||||
if args.promos:
|
if args.promos:
|
||||||
arg_store_id = int(args.promos[0])
|
arg_store_id = int(args.promos[0])
|
||||||
main_latest_promos(store_id=arg_store_id, load_xml=args.load_prices, chain=chain, load_promos=args.load_promos)
|
main_latest_promos(store_id=arg_store_id, load_xml=args.load_prices, chain=chain, load_promos=args.load_promos, file_type=file_type)
|
||||||
|
|
||||||
elif args.price:
|
elif args.price:
|
||||||
get_products_prices(chain, store_id=args.price[0], load_xml=args.load_prices, product_name=args.price[1])
|
get_products_prices(chain, store_id=args.price[0], load_xml=args.load_prices, product_name=args.price[1])
|
||||||
|
67
promotion.py
67
promotion.py
@@ -11,6 +11,7 @@ from utils import (
|
|||||||
create_bs_object,
|
create_bs_object,
|
||||||
)
|
)
|
||||||
from supermarket_chain import SupermarketChain
|
from supermarket_chain import SupermarketChain
|
||||||
|
import pandas as pd
|
||||||
|
|
||||||
INVALID_OR_UNKNOWN_PROMOTION_FUNCTION = -1
|
INVALID_OR_UNKNOWN_PROMOTION_FUNCTION = -1
|
||||||
|
|
||||||
@@ -44,7 +45,7 @@ class Promotion:
|
|||||||
|
|
||||||
def __init__(self, content: str, start_date: datetime, end_date: datetime, update_date: datetime, items: List[Item],
|
def __init__(self, content: str, start_date: datetime, end_date: datetime, update_date: datetime, items: List[Item],
|
||||||
promo_func: callable, club_id: ClubID, promotion_id: float, max_qty: int,
|
promo_func: callable, club_id: ClubID, promotion_id: float, max_qty: int,
|
||||||
allow_multiple_discounts: bool, reward_type: RewardType):
|
allow_multiple_discounts: bool, reward_type: RewardType, type_file: str = "excel"):
|
||||||
self.content: str = content
|
self.content: str = content
|
||||||
self.start_date: datetime = start_date
|
self.start_date: datetime = start_date
|
||||||
self.end_date: datetime = end_date
|
self.end_date: datetime = end_date
|
||||||
@@ -56,6 +57,7 @@ class Promotion:
|
|||||||
self.allow_multiple_discounts = allow_multiple_discounts
|
self.allow_multiple_discounts = allow_multiple_discounts
|
||||||
self.reward_type = reward_type
|
self.reward_type = reward_type
|
||||||
self.promotion_id = promotion_id
|
self.promotion_id = promotion_id
|
||||||
|
self.type_file = type_file
|
||||||
|
|
||||||
def repr_ltr(self):
|
def repr_ltr(self):
|
||||||
title = self.content
|
title = self.content
|
||||||
@@ -75,28 +77,43 @@ def write_promotions_to_csv(promotions: List[Promotion], output_filename: str) -
|
|||||||
:param output_filename: A given file to write to
|
:param output_filename: A given file to write to
|
||||||
"""
|
"""
|
||||||
encoding_file = "utf_8_sig" if sys.platform == "win32" else "utf_8"
|
encoding_file = "utf_8_sig" if sys.platform == "win32" else "utf_8"
|
||||||
|
columns = [
|
||||||
|
'תיאור מבצע',
|
||||||
|
'הפריט המשתתף במבצע',
|
||||||
|
'מחיר לפני מבצע',
|
||||||
|
'מחיר אחרי מבצע',
|
||||||
|
'אחוז הנחה',
|
||||||
|
'סוג מבצע',
|
||||||
|
'כמות מקס',
|
||||||
|
'כפל הנחות',
|
||||||
|
'המבצע החל',
|
||||||
|
'זמן תחילת מבצע',
|
||||||
|
'זמן סיום מבצע',
|
||||||
|
'זמן עדכון אחרון',
|
||||||
|
'יצרן',
|
||||||
|
'ברקוד פריט',
|
||||||
|
'סוג מבצע לפי תקנות שקיפות מחירים',
|
||||||
|
]
|
||||||
|
if output_filename.endswith(".csv"):
|
||||||
|
with open(output_filename, mode='w', newline='', encoding=encoding_file) as f_out:
|
||||||
|
promos_writer = csv.writer(f_out)
|
||||||
|
promos_writer.writerow(columns)
|
||||||
|
for promo in promotions:
|
||||||
|
promos_writer.writerows([get_promotion_row_in_csv(promo, item) for item in promo.items])
|
||||||
|
else:
|
||||||
|
with pd.ExcelWriter(output_filename, 'openpyxl', datetime_format='DD/MM/YYYY') as xl:
|
||||||
|
dt = pd.DataFrame(columns=columns)
|
||||||
|
for promo in promotions:
|
||||||
|
prms = dict_promos([get_promotion_row_in_csv(promo, item) for item in promo.items], columns)
|
||||||
|
if prms:
|
||||||
|
dt = dt.append(prms, True)
|
||||||
|
else:
|
||||||
|
continue
|
||||||
|
dt.to_excel(xl, index=False, sheet_name="name")
|
||||||
|
|
||||||
with open(output_filename, mode='w', newline='', encoding=encoding_file) as f_out:
|
|
||||||
promos_writer = csv.writer(f_out)
|
def dict_promos(promos: list, columns: list):
|
||||||
promos_writer.writerow([
|
return {col: p for prom in promos for col, p in zip(columns, prom)}
|
||||||
'תיאור מבצע',
|
|
||||||
'הפריט המשתתף במבצע',
|
|
||||||
'מחיר לפני מבצע',
|
|
||||||
'מחיר אחרי מבצע',
|
|
||||||
'אחוז הנחה',
|
|
||||||
'סוג מבצע',
|
|
||||||
'כמות מקס',
|
|
||||||
'כפל הנחות',
|
|
||||||
'המבצע החל',
|
|
||||||
'זמן תחילת מבצע',
|
|
||||||
'זמן סיום מבצע',
|
|
||||||
'זמן עדכון אחרון',
|
|
||||||
'יצרן',
|
|
||||||
'ברקוד פריט',
|
|
||||||
'סוג מבצע לפי תקנות שקיפות מחירים',
|
|
||||||
])
|
|
||||||
for promo in promotions:
|
|
||||||
promos_writer.writerows([get_promotion_row_in_csv(promo, item) for item in promo.items])
|
|
||||||
|
|
||||||
|
|
||||||
def get_promotion_row_in_csv(promo: Promotion, item: Item):
|
def get_promotion_row_in_csv(promo: Promotion, item: Item):
|
||||||
@@ -232,7 +249,8 @@ def is_valid_promo(end_time: datetime, description) -> bool:
|
|||||||
return not_expired and not in_promo_ignore_list
|
return not_expired and not in_promo_ignore_list
|
||||||
|
|
||||||
|
|
||||||
def main_latest_promos(store_id: int, load_xml: bool, chain: SupermarketChain, load_promos: bool) -> None:
|
def main_latest_promos(
|
||||||
|
store_id: int, load_xml: bool, chain: SupermarketChain, load_promos: bool, file_type: str) -> None:
|
||||||
"""
|
"""
|
||||||
This function writes to a CSV file the available promotions in a store with a given id sorted by their update date.
|
This function writes to a CSV file the available promotions in a store with a given id sorted by their update date.
|
||||||
|
|
||||||
@@ -245,7 +263,8 @@ def main_latest_promos(store_id: int, load_xml: bool, chain: SupermarketChain, l
|
|||||||
promotions: List[Promotion] = get_available_promos(chain, store_id, load_xml, load_promos)
|
promotions: List[Promotion] = get_available_promos(chain, store_id, load_xml, load_promos)
|
||||||
promotions.sort(key=lambda promo: (max(promo.update_date.date(), promo.start_date.date()), promo.start_date -
|
promotions.sort(key=lambda promo: (max(promo.update_date.date(), promo.start_date.date()), promo.start_date -
|
||||||
promo.end_date), reverse=True)
|
promo.end_date), reverse=True)
|
||||||
write_promotions_to_csv(promotions, f'results/{repr(type(chain))}_promos_{store_id}.csv')
|
ex_file = f'results/{repr(type(chain))}_promos_{store_id}{file_type}'
|
||||||
|
write_promotions_to_csv(promotions, ex_file)
|
||||||
|
|
||||||
|
|
||||||
def get_promos_by_name(store_id: int, chain: SupermarketChain, promo_name: str, load_prices: bool, load_promos: bool):
|
def get_promos_by_name(store_id: int, chain: SupermarketChain, promo_name: str, load_prices: bool, load_promos: bool):
|
||||||
|
@@ -6,3 +6,5 @@ lxml==4.6.1
|
|||||||
requests==2.25.0
|
requests==2.25.0
|
||||||
soupsieve==2.0.1
|
soupsieve==2.0.1
|
||||||
urllib3==1.26.2
|
urllib3==1.26.2
|
||||||
|
pandas<=1.1
|
||||||
|
openpyxl<=3.0.1
|
Reference in New Issue
Block a user