Untitled
unknown
plain_text
4 years ago
4.1 kB
10
Indexable
from pymongo import MongoClient from datetime import datetime from pandas import DataFrame, ExcelWriter, concat import argparse from multiprocessing.pool import ThreadPool from tqdm import tqdm envs = { "articprod": {"con_str": "mongodb://afgarticprodcosmosaccount:D4lfqlqPdBqrUOEknWwSu8j4USD43lnA7wfSRxOrStfd4YqCuCzVDdAgKNWM1Etz5DfYzqTuiOWOsSeTtHjOnw==@afgarticprodcosmosaccount.documents.azure.com:10255/?ssl=true&retrywrites=false", "db_name": "afgarticprodcosmosdb"} } class FetchFromDb(): def __init__(self, env_name): self.env_name = env_name self.env = envs[env_name] self.client = MongoClient(self.env["con_str"]) self.db = self.client[self.env["db_name"]] self.ord_col = self.db["artic_orders"] self.final_list = [] # def parse_to_list_df(self, i): # print('here') # parsed_list = self.parse_db_value(i) # self.final_list = self.final_list + parsed_list # def parse_db_value(self, i): # if 'lineItems' in i: # parsed_dict_list = [] # for item in i['lineItems']: # parsed_dict = {} # parsed_dict['productId'] = item['productId'] # parsed_dict['productName'] = item['productName'] if 'productName' in item else "" # parsed_dict['quantity'] = item['quantity'] # parsed_dict_list.append(parsed_dict) # return parsed_dict_list def fetch_custom(self, start_date, end_date): start_time_obj = datetime.strptime(start_date, '%d-%m-%Y') end_time_obj = datetime.strptime(end_date, '%d-%m-%Y') coll_order_list = list(self.ord_col.find( {"orderDate": {"$gte": start_time_obj, "$lte": end_time_obj }, "status": {"$nin": ["Receipt Closed", "Return Created", "ORDER_CANCELED"] }, "siteId": "mns-food-UAE"}, {"_id": 1, "orderNo": 1, "customerName": 1, "customerEmail": 1, "customerNo": 1, "orderDate": 1})) df_order_single_prod_list = DataFrame(coll_order_list) grouped = df_order_single_prod_list.groupby("customerEmail") customerEmail = [] customerName = [] count = [] orderNo = [] customerNames = [] print(grouped.head()) for count_items, group in grouped: # print("Count > ", count_items) # print("Group > ", group) customerEmail.append(count_items) customerName.append(group['customerName'].values) for i in customerName: custNames = list(set(i)) # list(dict.fromkeys(customerName)) # print("\n\n\ncount_items\n\n", custNames) count.append(len(group)) orderNo.append(group['orderNo'].values) customerNames.append(custNames[0]) final_df = DataFrame({ "customerEmail": customerEmail, "customerName": customerNames, "count": count, "orderNo": orderNo, }) print(final_df) # final_df1 =final_df.sort_values("count", ascending=False) # dto = datetime.now() # final_df1.to_excel(self.env_name + str(dto.year)+str(dto.month)+str(dto.day)+str(dto.hour)+str(dto.minute)+str(dto.second) + '_custom.xlsx', # sheet_name="custom", index=False) if __name__ == "__main__": fetch_from_db_articprod = FetchFromDb(env_name="articprod") parser = argparse.ArgumentParser() parser.add_argument('db', help='Enter which db to fetch. "uat" or "prod"') parser.add_argument( 'fromdate', help='Enter the from date. Ex: "dd-mm-yyyy"') parser.add_argument('todate', help='Enter the to date. Ex: "dd-mm-yyyy"') args = parser.parse_args() fetch_db = args.db start_date = args.fromdate end_date = args.todate if fetch_db == "articprod": fetch_from_db_articprod.fetch_custom(start_date, end_date)
Editor is loading...