ASHReports 0.0.2__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- ASHReports/BestSellersReports/JacadiBestseller.py +5 -0
- ASHReports/BestSellersReports/OkaidiBestseller.py +77 -0
- ASHReports/BestSellersReports/ParfoisBestseller.py +66 -0
- ASHReports/BestSellersReports/UndizBestseller.py +66 -0
- ASHReports/BestSellersReports/VincciBestseller.py +68 -0
- ASHReports/CombinedReports/DesigualCombined.py +0 -0
- ASHReports/CombinedReports/JacadiCombined.py +55 -0
- ASHReports/CombinedReports/LSRCombined.py +50 -0
- ASHReports/CombinedReports/OkaidiCombined.py +56 -0
- ASHReports/CombinedReports/ParfoisCombined.py +53 -0
- ASHReports/CombinedReports/UndizCombined.py +50 -0
- ASHReports/CombinedReports/VincciCombined.py +50 -0
- ASHReports/CombinedReports/YvesCombined.py +50 -0
- ASHReports/SellThruReports/JacadiST.py +52 -0
- ASHReports/SellThruReports/LSRST.py +7 -0
- ASHReports/SellThruReports/OkaidiST.py +59 -0
- ASHReports/SellThruReports/ParfoisST.py +79 -0
- ASHReports/SellThruReports/UndizST.py +64 -0
- ASHReports/SellThruReports/VincciST.py +66 -0
- ASHReports/SellThruReports/YvesST.py +7 -0
- ASHReports/StockReports/OkaidiStock.py +50 -0
- ASHReports/UtilReports/InsertImage.py +27 -0
- ASHReports/UtilReports/art2_files.py +200 -0
- ASHReports/UtilReports/crmreports.py +476 -0
- ASHReports/UtilReports/margin_proj.py +65 -0
- ASHReports/UtilReports/misc.py +217 -0
- ASHReports/UtilReports/online_sale.py +37 -0
- ASHReports/UtilReports/salenstock.py +186 -0
- ASHReports/UtilReports/salesummary.py +113 -0
- ASHReports/UtilReports/sellthru.py +51 -0
- ASHReports/UtilReports/sql.py +404 -0
- ASHReports/UtilReports/stock_summary.py +45 -0
- ASHReports/WeeklyReports/DesigualWeekly.py +140 -0
- ASHReports/WeeklyReports/JacadiWeekly.py +33 -0
- ASHReports/WeeklyReports/LSRWeekly.py +33 -0
- ASHReports/WeeklyReports/OkaidiWeekly.py +33 -0
- ASHReports/WeeklyReports/ParfoisWeekly.py +33 -0
- ASHReports/WeeklyReports/UndizWeekly.py +33 -0
- ASHReports/WeeklyReports/VincciWeekly.py +33 -0
- ASHReports/WeeklyReports/YvesWeekly.py +33 -0
- ASHReports/__init__.py +0 -0
- ASHReports/__main__.pyw +775 -0
- ASHReports/init_functions.dll +0 -0
- ASHReports/report_log.exe +0 -0
- ASHReports/ui_form.py +956 -0
- ashreports-0.0.2.dist-info/METADATA +27 -0
- ashreports-0.0.2.dist-info/RECORD +49 -0
- ashreports-0.0.2.dist-info/WHEEL +4 -0
- ashreports-0.0.2.dist-info/licenses/LICENCE.txt +7 -0
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import xlwings as xw
|
|
2
|
+
import os
|
|
3
|
+
from ASHC_v3.initiateConfig import initiateConfig
|
|
4
|
+
from ASHC_v3.BrandFunctions import okaidiWeeklyBestSellerReport
|
|
5
|
+
|
|
6
|
+
def startOkaidiBestSellerWorker(mw, progress_callback):
|
|
7
|
+
all_text = ""
|
|
8
|
+
# Get all user inputs
|
|
9
|
+
saleFileDir = mw.saleReportPath_lineedit.text()
|
|
10
|
+
stockFileDir = mw.stockReportPath_lineedit.text()
|
|
11
|
+
masterFileDir = mw.masterFolderPath_lineedit.text()
|
|
12
|
+
dataFileDir = mw.dataFolderPath_lineedit.text()
|
|
13
|
+
# Initiate Class parameters
|
|
14
|
+
initiateConfig(saleFileDir, stockFileDir, masterFileDir, dataFileDir, mw.output_folder)
|
|
15
|
+
imageDirectory = mw.imgFolderPath_lineedit.text()
|
|
16
|
+
merchWeek = mw.weekSelect_combobox.currentText()
|
|
17
|
+
brand = mw.brandSelect_combobox.currentText()
|
|
18
|
+
inputFile = os.path.join(mw.output_folder,"StyleSummary","OK_AllMerged.csv")
|
|
19
|
+
okBestSellerFile = os.path.join(mw.output_folder,"OK_BestSeller.csv")
|
|
20
|
+
okBestSellerXLSXFile = os.path.join(mw.output_folder,"OK_BestSeller_Report.xlsx")
|
|
21
|
+
all_text = all_text + f"Input File : {inputFile}\n"
|
|
22
|
+
progress_callback.emit(all_text)
|
|
23
|
+
path_exists = os.path.isfile(inputFile)
|
|
24
|
+
# Sanity Checks
|
|
25
|
+
if path_exists:
|
|
26
|
+
if brand == "OK":
|
|
27
|
+
if merchWeek != "All":
|
|
28
|
+
try:
|
|
29
|
+
app = xw.App(visible=False)
|
|
30
|
+
wb = xw.Book(mw.macroBook)
|
|
31
|
+
MakeOkaidiBestSellerReport_macro = wb.macro('OkaidiBestSellerReport')
|
|
32
|
+
InsertImage_macro = wb.macro('InsertImage')
|
|
33
|
+
all_text = all_text + "Okaidi Best Seller Report Process Started\n"
|
|
34
|
+
progress_callback.emit(all_text)
|
|
35
|
+
bestSeller = okaidiWeeklyBestSellerReport(inputFile, merchWeek, "TY25")
|
|
36
|
+
bestSeller.write_csv(okBestSellerFile, separator=",")
|
|
37
|
+
|
|
38
|
+
if mw.okSaleItem_checkBox.isChecked():
|
|
39
|
+
saleitemyes = 1
|
|
40
|
+
else:
|
|
41
|
+
saleitemyes = 0
|
|
42
|
+
|
|
43
|
+
MakeOkaidiBestSellerReport_macro(okBestSellerFile, saleitemyes)
|
|
44
|
+
all_text = all_text + "Intermediate file created for BestSeller report\n"
|
|
45
|
+
progress_callback.emit(all_text)
|
|
46
|
+
wbs = xw.Book(okBestSellerXLSXFile)
|
|
47
|
+
count = wbs.sheets.count
|
|
48
|
+
wbs.close()
|
|
49
|
+
imageDirectory = imageDirectory + "\\"
|
|
50
|
+
all_text = all_text + f"Image Folder Path : {imageDirectory}\n"
|
|
51
|
+
progress_callback.emit(all_text)
|
|
52
|
+
|
|
53
|
+
for num in range(1,count+1):
|
|
54
|
+
InsertImage_macro(okBestSellerXLSXFile, imageDirectory, num, 1)
|
|
55
|
+
all_text = all_text + f"Inserting Images...\n"
|
|
56
|
+
progress_callback.emit(all_text)
|
|
57
|
+
|
|
58
|
+
wb.close()
|
|
59
|
+
app.kill()
|
|
60
|
+
all_text = all_text + "Okaidi Best Seller Report Process Ended\n"
|
|
61
|
+
progress_callback.emit(all_text)
|
|
62
|
+
except:
|
|
63
|
+
wb.close()
|
|
64
|
+
app.kill()
|
|
65
|
+
all_text = all_text + "Due to error ending Okaidi Best Seller Report Process\n"
|
|
66
|
+
progress_callback.emit(all_text)
|
|
67
|
+
|
|
68
|
+
else:
|
|
69
|
+
all_text = all_text + "Select Week Number\n"
|
|
70
|
+
progress_callback.emit(all_text)
|
|
71
|
+
else:
|
|
72
|
+
all_text = all_text + "Select Brand as Okaidi\n"
|
|
73
|
+
progress_callback.emit(all_text)
|
|
74
|
+
else:
|
|
75
|
+
all_text = all_text + f"OK_AllMerged.csv file not available, first run brand report\n"
|
|
76
|
+
progress_callback.emit(all_text)
|
|
77
|
+
return "Done."
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import xlwings as xw
|
|
2
|
+
import polars as pl
|
|
3
|
+
import os
|
|
4
|
+
from ASHC_v3.initiateConfig import initiateConfig
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
def startParfoisBestSellerWorker(mw, progress_callback):
|
|
8
|
+
all_text = ""
|
|
9
|
+
# Get all user inputs
|
|
10
|
+
saleFileDir = mw.saleReportPath_lineedit.text()
|
|
11
|
+
stockFileDir = mw.stockReportPath_lineedit.text()
|
|
12
|
+
masterFileDir = mw.masterFolderPath_lineedit.text()
|
|
13
|
+
dataFileDir = mw.dataFolderPath_lineedit.text()
|
|
14
|
+
# Initiate Class parameters
|
|
15
|
+
initiateConfig(saleFileDir, stockFileDir, masterFileDir, dataFileDir, mw.output_folder)
|
|
16
|
+
merchWeek = mw.weekSelect_combobox.currentText()
|
|
17
|
+
brand = mw.brandSelect_combobox.currentText()
|
|
18
|
+
inputFile = os.path.join(mw.output_folder,"Combined","PA_Combined_Report.csv")
|
|
19
|
+
stFile = os.path.join(mw.output_folder,"PA_BestSeller.csv")
|
|
20
|
+
all_text = all_text + f"Input File : {inputFile}\n"
|
|
21
|
+
progress_callback.emit(all_text)
|
|
22
|
+
path_exists = os.path.isfile(inputFile)
|
|
23
|
+
# Sanity Checks
|
|
24
|
+
if path_exists:
|
|
25
|
+
if brand == "PA":
|
|
26
|
+
if merchWeek != "All":
|
|
27
|
+
try:
|
|
28
|
+
dfpa = pl.read_csv(inputFile,infer_schema_length=10000,).fill_null(0).fill_nan(0)
|
|
29
|
+
#dfpa = dfpa.with_columns((dfpa['Cumm. SaleValue'] + dfpa['MTD SaleValue'] + dfpa['WTD SaleValue'] + dfpa['StockRetail'] + dfpa['StockOrgRetail']).alias('ZeroFilter'))
|
|
30
|
+
dfpa = dfpa.with_columns((dfpa['Cumm. SaleQty'].abs() + dfpa['Cumm. CostValue'].abs() + dfpa['MTD SaleQty'].abs() + dfpa['WTD SaleQty'].abs() + dfpa['Closing Stock'].abs() + dfpa['StockCost'].abs()).alias('ZeroFilter'),)
|
|
31
|
+
dfpa = dfpa.filter(pl.col('ZeroFilter').ne(0))
|
|
32
|
+
dfpa = dfpa.filter(pl.col('Style Code').ne('All'))
|
|
33
|
+
dfpa = dfpa.with_columns((dfpa['ExchangeRate(AED)'] * dfpa['Cumm. SaleValue']).alias('Total Retail(AED)'))
|
|
34
|
+
dfpa = dfpa.with_columns((dfpa['ExchangeRate(AED)'] * dfpa['WTD SaleValue']).alias('LW SaleAmt(AED)'))
|
|
35
|
+
dfpa = dfpa.rename({'Cumm. SaleQty':'Total Sale Qty','WTD SaleQty':'LW SaleQty'})
|
|
36
|
+
dfSTpa = dfpa[['Brand Code','Country','ShortName','Item No_','Style Code','Colour Code','Size','Division','Product Group','Item Category','Item Class','Season Code',"Theme","Remarks",'Unit Price','Current Price','Closing Stock','LW SaleQty','LW SaleAmt(AED)','Total Sale Qty','Total Retail(AED)']]
|
|
37
|
+
pidx = ["Brand Code","Country","ShortName","Item No_","Style Code","Colour Code","Size","Division","Product Group","Item Category","Item Class","Season Code","Theme","Remarks"] #
|
|
38
|
+
pval = ['Total Sale Qty','Total Retail(AED)','LW SaleQty','LW SaleAmt(AED)','Closing Stock'] # "Total Sale Cost(AED)",'Total Cost(AED)'
|
|
39
|
+
dfSTpa = dfSTpa.group_by(pidx).agg(pl.sum(pval))
|
|
40
|
+
dfSTpa = dfSTpa.with_columns((dfSTpa['Total Sale Qty'] + dfSTpa['Closing Stock']).alias('Total Recvd Qty'))
|
|
41
|
+
dfSTpa.write_csv(stFile, separator=",")
|
|
42
|
+
app = xw.App(visible=False)
|
|
43
|
+
wb = xw.Book(mw.macroBook)
|
|
44
|
+
BestSeller_macro = wb.macro('ParfoisBestSellerReportNew')
|
|
45
|
+
all_text = all_text + "Parfois BestSeller Report Process Started\n"
|
|
46
|
+
progress_callback.emit(all_text)
|
|
47
|
+
BestSeller_macro(stFile, merchWeek)
|
|
48
|
+
wb.close()
|
|
49
|
+
app.kill()
|
|
50
|
+
all_text = all_text + "Parfois BestSeller Report Process Ended\n"
|
|
51
|
+
progress_callback.emit(all_text)
|
|
52
|
+
except:
|
|
53
|
+
wb.close()
|
|
54
|
+
app.kill()
|
|
55
|
+
all_text = all_text + "Due to error ending Parfois BestSeller Report Process\n"
|
|
56
|
+
progress_callback.emit(all_text)
|
|
57
|
+
else:
|
|
58
|
+
all_text = all_text + "Select Week Number\n"
|
|
59
|
+
progress_callback.emit(all_text)
|
|
60
|
+
else:
|
|
61
|
+
all_text = all_text + "Select Brand as Parfois\n"
|
|
62
|
+
progress_callback.emit(all_text)
|
|
63
|
+
else:
|
|
64
|
+
all_text = all_text + f"PA_Combined_Report.csv file not available, first run brand report\n"
|
|
65
|
+
progress_callback.emit(all_text)
|
|
66
|
+
return "Done."
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import xlwings as xw
|
|
2
|
+
import polars as pl
|
|
3
|
+
import os
|
|
4
|
+
import ASHC_v3 as ashc
|
|
5
|
+
from ASHC_v3.initiateConfig import initiateConfig
|
|
6
|
+
|
|
7
|
+
def startUndizBestSellerWorker(mw, progress_callback):
|
|
8
|
+
all_text = ""
|
|
9
|
+
# Get all user inputs
|
|
10
|
+
saleFileDir = mw.saleReportPath_lineedit.text()
|
|
11
|
+
stockFileDir = mw.stockReportPath_lineedit.text()
|
|
12
|
+
masterFileDir = mw.masterFolderPath_lineedit.text()
|
|
13
|
+
dataFileDir = mw.dataFolderPath_lineedit.text()
|
|
14
|
+
# Initiate Class parameters
|
|
15
|
+
initiateConfig(saleFileDir, stockFileDir, masterFileDir, dataFileDir, mw.output_folder)
|
|
16
|
+
imageDirectory = mw.imgFolderPath_lineedit.text()
|
|
17
|
+
merchWeek = mw.weekSelect_combobox.currentText()
|
|
18
|
+
brand = mw.brandSelect_combobox.currentText()
|
|
19
|
+
inputFile = os.path.join(mw.output_folder,"Combined","UZ_Combined_Report.csv")
|
|
20
|
+
bsFile = os.path.join(mw.output_folder,"UZ_BestSeller.csv")
|
|
21
|
+
all_text = all_text + f"Input File : {inputFile}\n"
|
|
22
|
+
progress_callback.emit(all_text)
|
|
23
|
+
path_exists = os.path.isfile(inputFile)
|
|
24
|
+
# Sanity Checks
|
|
25
|
+
if path_exists:
|
|
26
|
+
if brand == "UZ":
|
|
27
|
+
if merchWeek != "All":
|
|
28
|
+
try:
|
|
29
|
+
dfvi = pl.read_csv(inputFile, schema_overrides=ashc.dataTypeForAll).fill_null(0).fill_nan(0)
|
|
30
|
+
dfvi = dfvi.filter(pl.col('Season Code').is_in(mw.currentSeason))
|
|
31
|
+
dfvi = dfvi.filter(pl.col('Style Code').ne('All'))
|
|
32
|
+
dfvi = dfvi.with_columns((dfvi['ExchangeRate(AED)'] * dfvi['Cumm. SaleValue']).alias('Total Retail(AED)'))
|
|
33
|
+
dfvi = dfvi.with_columns((dfvi['ExchangeRate(AED)'] * dfvi['WTD SaleValue']).alias('LW SaleAmt(AED)'))
|
|
34
|
+
dfvi = dfvi.rename({'Cumm. SaleQty':'Total Sale Qty','WTD SaleQty':'LW SaleQty'})
|
|
35
|
+
dfBSvi = dfvi[['Brand Code','Country','ShortName','Style Code','Colour Code','Product Group','Item Category','Item Sub Class','Season Code','Size','Unit Price','Current Price','Closing Stock','LW SaleQty','LW SaleAmt(AED)','Total Sale Qty','Total Retail(AED)']]
|
|
36
|
+
pidx = ["Brand Code","Country","ShortName","Style Code","Colour Code","Size","Product Group","Item Category","Item Sub Class","Season Code"] # "Item No_"
|
|
37
|
+
pval = ['Total Sale Qty','Total Retail(AED)','LW SaleQty','LW SaleAmt(AED)','Closing Stock'] # "Total Sale Cost(AED)",'Total Cost(AED)'
|
|
38
|
+
dfBSvi = dfBSvi.group_by(pidx).agg(pl.sum(pval))
|
|
39
|
+
dfBSvi = dfBSvi.with_columns((dfBSvi['Total Sale Qty'] + dfBSvi['Closing Stock']).alias('Total Recvd Qty'))
|
|
40
|
+
dfBSvi.write_csv(bsFile, separator=",")
|
|
41
|
+
app = xw.App(visible=False)
|
|
42
|
+
wb = xw.Book(mw.macroBook)
|
|
43
|
+
StorePages_macro = wb.macro('UndizBestSellerReport')
|
|
44
|
+
InsertImage_macro = wb.macro('InsertImage')
|
|
45
|
+
all_text = all_text + "Undiz Best Seller Report Process Started\n"
|
|
46
|
+
progress_callback.emit(all_text)
|
|
47
|
+
StorePages_macro(bsFile, merchWeek)
|
|
48
|
+
wb.close()
|
|
49
|
+
app.kill()
|
|
50
|
+
all_text = all_text + "Undiz Best Seller Report Process Ended\n"
|
|
51
|
+
progress_callback.emit(all_text)
|
|
52
|
+
except:
|
|
53
|
+
wb.close()
|
|
54
|
+
app.kill()
|
|
55
|
+
all_text = all_text + "Due to error ending Undiz Best Seller Report Process\n"
|
|
56
|
+
progress_callback.emit(all_text)
|
|
57
|
+
else:
|
|
58
|
+
all_text = all_text + "Select Week Number\n"
|
|
59
|
+
progress_callback.emit(all_text)
|
|
60
|
+
else:
|
|
61
|
+
all_text = all_text + "Select Brand as Undiz\n"
|
|
62
|
+
progress_callback.emit(all_text)
|
|
63
|
+
else:
|
|
64
|
+
all_text = all_text + f"UZ_Combined_Report.csv file not available, first run brand report\n"
|
|
65
|
+
progress_callback.emit(all_text)
|
|
66
|
+
return "Done."
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import xlwings as xw
|
|
2
|
+
import polars as pl
|
|
3
|
+
import os
|
|
4
|
+
import ASHC_v3 as ashc
|
|
5
|
+
from ASHC_v3.initiateConfig import initiateConfig
|
|
6
|
+
|
|
7
|
+
def startVincciBestSellerWorker(mw, progress_callback):
|
|
8
|
+
all_text = ""
|
|
9
|
+
# Get all user inputs
|
|
10
|
+
saleFileDir = mw.saleReportPath_lineedit.text()
|
|
11
|
+
stockFileDir = mw.stockReportPath_lineedit.text()
|
|
12
|
+
masterFileDir = mw.masterFolderPath_lineedit.text()
|
|
13
|
+
dataFileDir = mw.dataFolderPath_lineedit.text()
|
|
14
|
+
# Initiate Class parameters
|
|
15
|
+
initiateConfig(saleFileDir, stockFileDir, masterFileDir, dataFileDir, mw.output_folder)
|
|
16
|
+
imageDirectory = mw.imgFolderPath_lineedit.text()
|
|
17
|
+
merchWeek = mw.weekSelect_combobox.currentText()
|
|
18
|
+
brand = mw.brandSelect_combobox.currentText()
|
|
19
|
+
inputFile = os.path.join(mw.output_folder,"Combined","VI_Combined_Report.csv")
|
|
20
|
+
bsFile = os.path.join(mw.output_folder,"VI_BestSeller.csv")
|
|
21
|
+
all_text = all_text + f"Input File : {inputFile}\n"
|
|
22
|
+
progress_callback.emit(all_text)
|
|
23
|
+
path_exists = os.path.isfile(inputFile)
|
|
24
|
+
# Sanity Checks
|
|
25
|
+
if path_exists:
|
|
26
|
+
if brand == "VI":
|
|
27
|
+
if merchWeek != "All":
|
|
28
|
+
try:
|
|
29
|
+
dfvi = pl.read_csv(inputFile, schema_overrides=ashc.dataTypeForAll)
|
|
30
|
+
dfvi = dfvi.fill_null(0)
|
|
31
|
+
dfvi = dfvi.fill_nan(0)
|
|
32
|
+
dfvi = dfvi.filter(pl.col('Season Code').is_in(mw.currentSeason))
|
|
33
|
+
dfvi = dfvi.filter(pl.col('Style Code').ne('All'))
|
|
34
|
+
dfvi = dfvi.with_columns((dfvi['ExchangeRate(AED)'] * dfvi['Cumm. SaleValue']).alias('Total Retail(AED)'))
|
|
35
|
+
dfvi = dfvi.with_columns((dfvi['ExchangeRate(AED)'] * dfvi['WTD SaleValue']).alias('LW SaleAmt(AED)'))
|
|
36
|
+
dfvi = dfvi.rename({'Cumm. SaleQty':'Total Sale Qty','WTD SaleQty':'LW SaleQty'})
|
|
37
|
+
dfBSvi = dfvi[['Brand Code','Country','ShortName','Style Code','Colour Code','Size','Product Group','Item Category','Item Sub Class','Season Code','Unit Price','Current Price','Closing Stock','LW SaleQty','LW SaleAmt(AED)','Total Sale Qty','Total Retail(AED)']]
|
|
38
|
+
pidx = ["Brand Code","Country","ShortName","Style Code","Colour Code","Size","Product Group","Item Category","Item Sub Class","Season Code"] # "Item No_"
|
|
39
|
+
pval = ['Total Sale Qty','Total Retail(AED)','LW SaleQty','LW SaleAmt(AED)','Closing Stock'] # "Total Sale Cost(AED)",'Total Cost(AED)'
|
|
40
|
+
dfBSvi = dfBSvi.group_by(pidx).agg(pl.sum(pval))
|
|
41
|
+
dfBSvi = dfBSvi.with_columns((dfBSvi['Total Sale Qty'] + dfBSvi['Closing Stock']).alias('Total Recvd Qty'))
|
|
42
|
+
dfBSvi.write_csv(bsFile, separator=",")
|
|
43
|
+
app = xw.App(visible=False)
|
|
44
|
+
wb = xw.Book(mw.macroBook)
|
|
45
|
+
StorePages_macro = wb.macro('VincciBestSellerReport')
|
|
46
|
+
InsertImage_macro = wb.macro('InsertImage')
|
|
47
|
+
all_text = all_text + "Vincci Best Seller Report Process Started\n"
|
|
48
|
+
progress_callback.emit(all_text)
|
|
49
|
+
StorePages_macro(bsFile, merchWeek)
|
|
50
|
+
wb.close()
|
|
51
|
+
app.kill()
|
|
52
|
+
all_text = all_text + "Vincci Best Seller Report Process Ended\n"
|
|
53
|
+
progress_callback.emit(all_text)
|
|
54
|
+
except:
|
|
55
|
+
wb.close()
|
|
56
|
+
app.kill()
|
|
57
|
+
all_text = all_text + "Due to error ending Vincci Best Seller Report Process\n"
|
|
58
|
+
progress_callback.emit(all_text)
|
|
59
|
+
else:
|
|
60
|
+
all_text = all_text + "Select Week Number\n"
|
|
61
|
+
progress_callback.emit(all_text)
|
|
62
|
+
else:
|
|
63
|
+
all_text = all_text + "Select Brand as Vincci\n"
|
|
64
|
+
progress_callback.emit(all_text)
|
|
65
|
+
else:
|
|
66
|
+
all_text = all_text + f"VI_Combined_Report.csv file not available, first run brand report\n"
|
|
67
|
+
progress_callback.emit(all_text)
|
|
68
|
+
return "Done."
|
|
File without changes
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import os,sys
|
|
2
|
+
import polars as pl
|
|
3
|
+
import ASHC_v3 as ashc
|
|
4
|
+
from ASHC_v3.Masters import JCMerchHier
|
|
5
|
+
from ASHC_v3.CommonFunction import MapOffer
|
|
6
|
+
from ASHC_v3.initiateConfig import initiateConfig
|
|
7
|
+
from ASHC_v3.SaleAndStockExtra import returnFirstAndLastPurchDate, returnUnitCost
|
|
8
|
+
from ASHReports.UtilReports.misc import PP2
|
|
9
|
+
|
|
10
|
+
def startCombinedReportWorker(mw, progress_callback):
|
|
11
|
+
brand = "JC"
|
|
12
|
+
all_text = ""
|
|
13
|
+
all_text = all_text + f"Combined Report Process Started for {brand}...\n"
|
|
14
|
+
progress_callback.emit(all_text)
|
|
15
|
+
# Get all user inputs
|
|
16
|
+
saleFileDir = mw.saleReportPath_lineedit.text()
|
|
17
|
+
stockFileDir = mw.stockReportPath_lineedit.text()
|
|
18
|
+
masterFileDir = mw.masterFolderPath_lineedit.text()
|
|
19
|
+
dataFileDir = mw.dataFolderPath_lineedit.text()
|
|
20
|
+
# Initiate Class parameters
|
|
21
|
+
initiateConfig(saleFileDir, stockFileDir, masterFileDir, dataFileDir, mw.output_folder)
|
|
22
|
+
if not mw.initDLL.create_task(mw.task_file_path.encode('utf-8')):
|
|
23
|
+
sys.exit(0)
|
|
24
|
+
|
|
25
|
+
ucs, ups, ucp = returnUnitCost()
|
|
26
|
+
dictFRD, dictLRD = returnFirstAndLastPurchDate()
|
|
27
|
+
pl_Pvt = PP2(mw, saleFileDir, stockFileDir, brand, ucs, ups, ucp, dictFRD, dictLRD)
|
|
28
|
+
|
|
29
|
+
pl_Pvt = JCMerchHier(pl_Pvt)
|
|
30
|
+
pl_Pvt = pl_Pvt.with_columns((pl_Pvt['Closing Stock'] + pl_Pvt['Cumm. SaleQty']).alias('Purchased'),)
|
|
31
|
+
pl_Pvt = pl_Pvt.with_columns(pl.col("Location Code").replace_strict(ashc.Status, return_dtype=pl.String, default=None).alias('Status'))
|
|
32
|
+
try:
|
|
33
|
+
pl_Pvt = pl_Pvt.with_columns(pl.col("Colour Code").map_elements(lambda x: str(int(float(x))).replace(".0",""), return_dtype=pl.String).alias('Colour Code'),)
|
|
34
|
+
except:
|
|
35
|
+
pl_Pvt = pl_Pvt.with_columns(pl.col("Colour Code").map_elements(lambda x: str(x).replace(".0",""), return_dtype=pl.String).alias('Colour Code'),)
|
|
36
|
+
pl_Pvt = pl_Pvt.with_columns((pl.col('Style Code') + pl.col('Colour Code')).alias('RefCode'),)
|
|
37
|
+
pl_Pvt = pl_Pvt.with_columns((pl_Pvt['Country'] + pl_Pvt['RefCode']).alias('Combo2'),)
|
|
38
|
+
pl_Pvt = pl_Pvt.with_columns(pl.lit(0.0,dtype=pl.Float32).alias('Disc.P'),)
|
|
39
|
+
pl_Pvt = MapOffer(pl_Pvt)
|
|
40
|
+
pl_Pvt = pl_Pvt.with_columns(pl.when(pl.col('Offer_Price') > 0.0).then(pl.lit('Disc')).otherwise(pl.lit(' ')).alias('EOSS Discount'),)
|
|
41
|
+
pl_Pvt = pl_Pvt.with_columns(pl.when(pl.col('Offer_Price') > 0.0).then((pl.col('Unit Price') - pl.col('Offer_Price'))/pl.col('Unit Price')).otherwise(0).alias('Disc.P'),)
|
|
42
|
+
|
|
43
|
+
pl_Pvt = pl_Pvt.rename({'Season Code':'Season Item'})
|
|
44
|
+
pl_Pvt = pl_Pvt.rename({'Season':'Season Code'})
|
|
45
|
+
pl_Pvt = pl_Pvt.filter(pl.col('Season Code').is_in(mw.currentSeason))
|
|
46
|
+
#pl_Pvt = pl_Pvt.with_columns((pl_Pvt['Cumm. SaleQty'].abs() + pl_Pvt['Cumm. CostValue'].abs() + pl_Pvt['MTD SaleQty'].abs() + pl_Pvt['WTD SaleQty'].abs() + pl_Pvt['Closing Stock'].abs() + pl_Pvt['StockCost'].abs()).alias('ZeroFilter'),)
|
|
47
|
+
#pl_Pvt = pl_Pvt.filter(pl.col('ZeroFilter')>0)
|
|
48
|
+
|
|
49
|
+
pl_Pvt = pl_Pvt[mw.combined_report_columns]
|
|
50
|
+
pl_Pvt.write_csv(os.path.join(mw.output_folder,"Combined",f"{brand}_Combined_Report.csv"), separator=",")
|
|
51
|
+
s8 = pl_Pvt["Cumm. SaleQty"].sum()
|
|
52
|
+
s9 = pl_Pvt["Closing Stock"].sum()
|
|
53
|
+
all_text = all_text + f"JC Report Done, Cumm Sale Qty {s8} Closing Stock {s9}\n"
|
|
54
|
+
progress_callback.emit(all_text)
|
|
55
|
+
return "Done."
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import os
|
|
2
|
+
import polars as pl
|
|
3
|
+
import ASHC_v3 as ashc
|
|
4
|
+
from ASHC_v3.Masters import LSMerchHier
|
|
5
|
+
from ASHC_v3.CommonFunction import MapOffer
|
|
6
|
+
from ASHC_v3.initiateConfig import initiateConfig
|
|
7
|
+
from ASHC_v3.SaleAndStockExtra import returnFirstAndLastPurchDate, returnUnitCost
|
|
8
|
+
from ASHReports.UtilReports.misc import PP2
|
|
9
|
+
|
|
10
|
+
def startCombinedReportWorker(mw, progress_callback):
|
|
11
|
+
brand = "LS"
|
|
12
|
+
all_text = ""
|
|
13
|
+
all_text = all_text + f"Combined Report Process Started for {brand}...\n"
|
|
14
|
+
progress_callback.emit(all_text)
|
|
15
|
+
# Get all user inputs
|
|
16
|
+
saleFileDir = mw.saleReportPath_lineedit.text()
|
|
17
|
+
stockFileDir = mw.stockReportPath_lineedit.text()
|
|
18
|
+
masterFileDir = mw.masterFolderPath_lineedit.text()
|
|
19
|
+
dataFileDir = mw.dataFolderPath_lineedit.text()
|
|
20
|
+
# Initiate Class parameters
|
|
21
|
+
initiateConfig(saleFileDir, stockFileDir, masterFileDir, dataFileDir, mw.output_folder)
|
|
22
|
+
ucs, ups, ucp = returnUnitCost()
|
|
23
|
+
dictFRD, dictLRD = returnFirstAndLastPurchDate()
|
|
24
|
+
|
|
25
|
+
pl_Pvt = PP2(mw, saleFileDir, stockFileDir, brand, ucs, ups, ucp, dictFRD, dictLRD)
|
|
26
|
+
pl_Pvt = LSMerchHier(pl_Pvt)
|
|
27
|
+
pl_Pvt = pl_Pvt.with_columns((pl_Pvt['Closing Stock'] + pl_Pvt['Cumm. SaleQty']).alias('Purchased'),)
|
|
28
|
+
pl_Pvt = pl_Pvt.with_columns(pl.col("Location Code").replace_strict(ashc.Status, return_dtype=pl.String, default=None).alias('Status'))
|
|
29
|
+
pl_Pvt = pl_Pvt.with_columns(pl.col("Style Code").cast(pl.String).str.replace_all('.0','',literal=True).alias('Style Code'),)
|
|
30
|
+
pl_Pvt = pl_Pvt.with_columns(pl.col("Colour Code").cast(pl.String).str.replace_all('.0','',literal=True).alias('Colour Code'),)
|
|
31
|
+
pl_Pvt = pl_Pvt.with_columns((pl.col('Style Code') + pl.col('Colour Code')).alias('RefCode'),)
|
|
32
|
+
pl_Pvt = pl_Pvt.with_columns((pl_Pvt['Country'] + pl_Pvt['RefCode']).alias('Combo2'),)
|
|
33
|
+
pl_Pvt = pl_Pvt.with_columns(pl.lit(0.0,dtype=pl.Float32).alias('Disc.P'),)
|
|
34
|
+
pl_Pvt = MapOffer(pl_Pvt)
|
|
35
|
+
pl_Pvt = pl_Pvt.with_columns(pl.when(pl.col('Offer_Price') > 0.0).then(pl.lit('Disc')).otherwise(pl.lit(' ')).alias('EOSS Discount'),)
|
|
36
|
+
pl_Pvt = pl_Pvt.with_columns(pl.when(pl.col('Offer_Price') > 0.0).then((pl.col('Unit Price') - pl.col('Offer_Price'))/pl.col('Unit Price')).otherwise(0).alias('Disc.P'),)
|
|
37
|
+
|
|
38
|
+
#pl_Pvt = pl_Pvt.rename({'Season Code':'Season Item'})
|
|
39
|
+
#pl_Pvt = pl_Pvt.rename({'Season':'Season Code'})
|
|
40
|
+
#pl_Pvt = pl_Pvt.filter(pl.col('Season Code').is_in(mw.currentSeason))
|
|
41
|
+
#pl_Pvt = pl_Pvt.with_columns((pl_Pvt['Cumm. SaleQty'].abs() + pl_Pvt['Cumm. CostValue'].abs() + pl_Pvt['MTD SaleQty'].abs() + pl_Pvt['WTD SaleQty'].abs() + pl_Pvt['Closing Stock'].abs() + pl_Pvt['StockCost'].abs()).alias('ZeroFilter'),)
|
|
42
|
+
#pl_Pvt = pl_Pvt.filter(pl.col('ZeroFilter')>0)
|
|
43
|
+
|
|
44
|
+
pl_Pvt = pl_Pvt[mw.combined_report_columns]
|
|
45
|
+
pl_Pvt.write_csv(os.path.join(mw.output_folder,"Combined",f"{brand}_Combined_Report.csv"), separator=",")
|
|
46
|
+
s8 = pl_Pvt["Cumm. SaleQty"].sum()
|
|
47
|
+
s9 = pl_Pvt["Closing Stock"].sum()
|
|
48
|
+
all_text = all_text + f"LS Report Done, Cumm Sale Qty {s8} Closing Stock {s9}\n"
|
|
49
|
+
progress_callback.emit(all_text)
|
|
50
|
+
return "Done."
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import os,sys
|
|
2
|
+
import polars as pl
|
|
3
|
+
import ASHC_v3 as ashc
|
|
4
|
+
from ASHC_v3.Masters import OKMerchHier
|
|
5
|
+
from ASHC_v3.CommonFunction import MapOffer
|
|
6
|
+
from ASHC_v3.initiateConfig import initiateConfig
|
|
7
|
+
from ASHC_v3.SaleAndStockExtra import returnFirstAndLastPurchDate, returnUnitCost
|
|
8
|
+
from ASHReports.UtilReports.misc import PP2
|
|
9
|
+
|
|
10
|
+
def startCombinedReportWorker(mw, progress_callback):
|
|
11
|
+
brand = "OK"
|
|
12
|
+
all_text = ""
|
|
13
|
+
all_text = all_text + f"Combined Report Process Started for {brand}...\n"
|
|
14
|
+
progress_callback.emit(all_text)
|
|
15
|
+
# Get all user inputs
|
|
16
|
+
saleFileDir = mw.saleReportPath_lineedit.text()
|
|
17
|
+
stockFileDir = mw.stockReportPath_lineedit.text()
|
|
18
|
+
masterFileDir = mw.masterFolderPath_lineedit.text()
|
|
19
|
+
dataFileDir = mw.dataFolderPath_lineedit.text()
|
|
20
|
+
# Initiate Class parameters
|
|
21
|
+
initiateConfig(saleFileDir, stockFileDir, masterFileDir, dataFileDir, mw.output_folder)
|
|
22
|
+
if not mw.initDLL.create_task(mw.task_file_path.encode('utf-8')):
|
|
23
|
+
sys.exit(0)
|
|
24
|
+
|
|
25
|
+
ucs, ups, ucp = returnUnitCost()
|
|
26
|
+
dictFRD, dictLRD = returnFirstAndLastPurchDate()
|
|
27
|
+
pl_Pvt = PP2(mw, saleFileDir, stockFileDir, brand, ucs, ups, ucp, dictFRD, dictLRD)
|
|
28
|
+
pl_Pvt = OKMerchHier(pl_Pvt)
|
|
29
|
+
pl_Pvt = pl_Pvt.with_columns((pl_Pvt['Closing Stock'] + pl_Pvt['Cumm. SaleQty']).alias('Purchased'),)
|
|
30
|
+
pl_Pvt = pl_Pvt.with_columns(pl.col("Location Code").replace_strict(ashc.Status, return_dtype=pl.String, default=None).alias('Status'))
|
|
31
|
+
pl_Pvt = pl_Pvt.with_columns(pl.col("Style Code").cast(pl.String).str.replace_all('.0','',literal=True).alias('Style Code'),)
|
|
32
|
+
try:
|
|
33
|
+
pl_Pvt = pl_Pvt.with_columns(pl.col("Colour Code").cast(pl.String).str.replace_all('.0','',literal=True).alias('Colour Code'),)
|
|
34
|
+
except:
|
|
35
|
+
pl_Pvt = pl_Pvt.with_columns(pl.col("Colour Code").cast(pl.String).str.replace_all('.0','',literal=True).alias('Colour Code'),)
|
|
36
|
+
|
|
37
|
+
pl_Pvt = pl_Pvt.with_columns((pl.col('Style Code') + pl.col('Colour Code')).alias('RefCode'),)
|
|
38
|
+
pl_Pvt = pl_Pvt.with_columns((pl_Pvt['Country'] + pl_Pvt['RefCode']).alias('Combo2'),)
|
|
39
|
+
pl_Pvt = pl_Pvt.with_columns(pl.lit(0.0,dtype=pl.Float32).alias('Disc.P'),)
|
|
40
|
+
pl_Pvt = MapOffer(pl_Pvt)
|
|
41
|
+
pl_Pvt = pl_Pvt.with_columns(pl.when(pl.col('Offer_Price') > 0.0).then(pl.lit('Disc')).otherwise(pl.lit(' ')).alias('EOSS Discount'),)
|
|
42
|
+
pl_Pvt = pl_Pvt.with_columns(pl.when(pl.col('Offer_Price') > 0.0).then((pl.col('Unit Price') - pl.col('Offer_Price'))/pl.col('Unit Price')).otherwise(0).alias('Disc.P'),)
|
|
43
|
+
|
|
44
|
+
#pl_Pvt = pl_Pvt.rename({'Season Code':'Season Item'})
|
|
45
|
+
#pl_Pvt = pl_Pvt.rename({'Season':'Season Code'})
|
|
46
|
+
pl_Pvt = pl_Pvt.filter(pl.col('Season Code').is_in(mw.currentSeason))
|
|
47
|
+
#pl_Pvt = pl_Pvt.with_columns((pl_Pvt['Cumm. SaleQty'].abs() + pl_Pvt['Cumm. CostValue'].abs() + pl_Pvt['MTD SaleQty'].abs() + pl_Pvt['WTD SaleQty'].abs() + pl_Pvt['Closing Stock'].abs() + pl_Pvt['StockCost'].abs()).alias('ZeroFilter'),)
|
|
48
|
+
#pl_Pvt = pl_Pvt.filter(pl.col('ZeroFilter')>0)
|
|
49
|
+
|
|
50
|
+
pl_Pvt = pl_Pvt[mw.combined_report_columns]
|
|
51
|
+
pl_Pvt.write_csv(os.path.join(mw.output_folder,"Combined",f"{brand}_Combined_Report.csv"), separator=",")
|
|
52
|
+
s8 = pl_Pvt["Cumm. SaleQty"].sum()
|
|
53
|
+
s9 = pl_Pvt["Closing Stock"].sum()
|
|
54
|
+
all_text = all_text + f"OK Report Done, Cumm Sale Qty {s8} Closing Stock {s9}\n"
|
|
55
|
+
progress_callback.emit(all_text)
|
|
56
|
+
return "Done."
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import os,sys
|
|
2
|
+
import polars as pl
|
|
3
|
+
import ASHC_v3 as ashc
|
|
4
|
+
from ASHC_v3.Masters import PAMerchHier
|
|
5
|
+
from ASHC_v3.CommonFunction import MapOffer
|
|
6
|
+
from ASHC_v3.initiateConfig import initiateConfig
|
|
7
|
+
from ASHC_v3.SaleAndStockExtra import returnFirstAndLastPurchDate, returnUnitCost
|
|
8
|
+
from ASHReports.UtilReports.misc import PP2
|
|
9
|
+
|
|
10
|
+
def startCombinedReportWorker(mw, progress_callback):
|
|
11
|
+
brand = "PA"
|
|
12
|
+
all_text = ""
|
|
13
|
+
all_text = all_text + f"Combined Report Process Started for {brand}...\n"
|
|
14
|
+
progress_callback.emit(all_text)
|
|
15
|
+
# Get all user inputs
|
|
16
|
+
saleFileDir = mw.saleReportPath_lineedit.text()
|
|
17
|
+
stockFileDir = mw.stockReportPath_lineedit.text()
|
|
18
|
+
masterFileDir = mw.masterFolderPath_lineedit.text()
|
|
19
|
+
dataFileDir = mw.dataFolderPath_lineedit.text()
|
|
20
|
+
# Initiate Class parameters
|
|
21
|
+
initiateConfig(saleFileDir, stockFileDir, masterFileDir, dataFileDir, mw.output_folder)
|
|
22
|
+
if not mw.initDLL.create_task(mw.task_file_path.encode('utf-8')):
|
|
23
|
+
sys.exit(0)
|
|
24
|
+
|
|
25
|
+
ucs, ups, ucp = returnUnitCost()
|
|
26
|
+
dictFRD, dictLRD = returnFirstAndLastPurchDate()
|
|
27
|
+
|
|
28
|
+
pl_Pvt = PP2(mw, saleFileDir, stockFileDir, brand, ucs, ups, ucp, dictFRD, dictLRD)
|
|
29
|
+
pl_Pvt = PAMerchHier(pl_Pvt)
|
|
30
|
+
pl_Pvt = pl_Pvt.with_columns((pl_Pvt['Closing Stock'] + pl_Pvt['Cumm. SaleQty']).alias('Purchased'),)
|
|
31
|
+
pl_Pvt = pl_Pvt.with_columns(pl.col("Location Code").replace_strict(ashc.Status, return_dtype=pl.String, default=None).alias('Status'))
|
|
32
|
+
pl_Pvt = pl_Pvt.with_columns(pl.col("Style Code").cast(pl.String).str.replace_all('.0','',literal=True).alias('Style Code'),)
|
|
33
|
+
pl_Pvt = pl_Pvt.with_columns(pl.col("Colour Code").cast(pl.String).str.replace_all('.0','',literal=True).alias('Colour Code'),)
|
|
34
|
+
pl_Pvt = pl_Pvt.with_columns((pl.col('Style Code') + pl.col('Colour Code')).alias('RefCode'),)
|
|
35
|
+
pl_Pvt = pl_Pvt.with_columns((pl_Pvt['Country'] + pl_Pvt['RefCode']).alias('Combo2'),)
|
|
36
|
+
pl_Pvt = pl_Pvt.with_columns(pl.lit(0.0,dtype=pl.Float32).alias('Disc.P'),)
|
|
37
|
+
pl_Pvt = MapOffer(pl_Pvt)
|
|
38
|
+
pl_Pvt = pl_Pvt.with_columns(pl.when(pl.col('Offer_Price') > 0.0).then(pl.lit('Disc')).otherwise(pl.lit(' ')).alias('EOSS Discount'),)
|
|
39
|
+
pl_Pvt = pl_Pvt.with_columns(pl.when(pl.col('Offer_Price') > 0.0).then((pl.col('Unit Price') - pl.col('Offer_Price'))/pl.col('Unit Price')).otherwise(0).alias('Disc.P'),)
|
|
40
|
+
|
|
41
|
+
pl_Pvt = pl_Pvt.rename({'Season Code':'Season Item'})
|
|
42
|
+
pl_Pvt = pl_Pvt.rename({'Season':'Season Code'})
|
|
43
|
+
pl_Pvt = pl_Pvt.filter(pl.col('Season Code').is_in(mw.currentSeason))
|
|
44
|
+
#pl_Pvt = pl_Pvt.with_columns((pl_Pvt['Cumm. SaleQty'].abs() + pl_Pvt['Cumm. CostValue'].abs() + pl_Pvt['MTD SaleQty'].abs() + pl_Pvt['WTD SaleQty'].abs() + pl_Pvt['Closing Stock'].abs() + pl_Pvt['StockCost'].abs()).alias('ZeroFilter'),)
|
|
45
|
+
#pl_Pvt = pl_Pvt.filter(pl.col('ZeroFilter') > 0)
|
|
46
|
+
|
|
47
|
+
pl_Pvt = pl_Pvt[mw.combined_report_columns]
|
|
48
|
+
pl_Pvt.write_csv(os.path.join(mw.output_folder,"Combined",f"{brand}_Combined_Report.csv"), separator=",")
|
|
49
|
+
s8 = pl_Pvt["Cumm. SaleQty"].sum()
|
|
50
|
+
s9 = pl_Pvt["Closing Stock"].sum()
|
|
51
|
+
all_text = all_text + f"PA Report Done, Cumm Sale Qty {s8} Closing Stock {s9}\n"
|
|
52
|
+
progress_callback.emit(all_text)
|
|
53
|
+
return "Done."
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import os
|
|
2
|
+
import polars as pl
|
|
3
|
+
import ASHC_v3 as ashc
|
|
4
|
+
from ASHC_v3.Masters import UZMerchHier
|
|
5
|
+
from ASHC_v3.CommonFunction import MapOffer
|
|
6
|
+
from ASHC_v3.initiateConfig import initiateConfig
|
|
7
|
+
from ASHC_v3.SaleAndStockExtra import returnFirstAndLastPurchDate, returnUnitCost
|
|
8
|
+
from ASHReports.UtilReports.misc import PP2
|
|
9
|
+
|
|
10
|
+
def startCombinedReportWorker(mw, progress_callback):
|
|
11
|
+
brand = "UZ"
|
|
12
|
+
all_text = ""
|
|
13
|
+
all_text = all_text + f"Combined Report Process Started for {brand}...\n"
|
|
14
|
+
progress_callback.emit(all_text)
|
|
15
|
+
# Get all user inputs
|
|
16
|
+
saleFileDir = mw.saleReportPath_lineedit.text()
|
|
17
|
+
stockFileDir = mw.stockReportPath_lineedit.text()
|
|
18
|
+
masterFileDir = mw.masterFolderPath_lineedit.text()
|
|
19
|
+
dataFileDir = mw.dataFolderPath_lineedit.text()
|
|
20
|
+
# Initiate Class parameters
|
|
21
|
+
initiateConfig(saleFileDir, stockFileDir, masterFileDir, dataFileDir, mw.output_folder)
|
|
22
|
+
ucs, ups, ucp = returnUnitCost()
|
|
23
|
+
dictFRD, dictLRD = returnFirstAndLastPurchDate()
|
|
24
|
+
|
|
25
|
+
pl_Pvt = PP2(mw, saleFileDir, stockFileDir, brand, ucs, ups, ucp, dictFRD, dictLRD)
|
|
26
|
+
pl_Pvt = UZMerchHier(pl_Pvt)
|
|
27
|
+
pl_Pvt = pl_Pvt.with_columns((pl_Pvt['Closing Stock'] + pl_Pvt['Cumm. SaleQty']).alias('Purchased'),)
|
|
28
|
+
pl_Pvt = pl_Pvt.with_columns(pl.col("Location Code").replace_strict(ashc.Status, return_dtype=pl.String, default=None).alias('Status'))
|
|
29
|
+
pl_Pvt = pl_Pvt.with_columns(pl.col("Style Code").cast(pl.String).str.replace_all('.0','',literal=True).alias('Style Code'),)
|
|
30
|
+
pl_Pvt = pl_Pvt.with_columns(pl.col("Colour Code").cast(pl.String).str.replace_all('.0','',literal=True).alias('Colour Code'),)
|
|
31
|
+
pl_Pvt = pl_Pvt.with_columns((pl.col('Style Code') + pl.col('Colour Code')).alias('RefCode'),)
|
|
32
|
+
pl_Pvt = pl_Pvt.with_columns((pl_Pvt['Country'] + pl_Pvt['RefCode']).alias('Combo2'),)
|
|
33
|
+
pl_Pvt = pl_Pvt.with_columns(pl.lit(0.0,dtype=pl.Float32).alias('Disc.P'),)
|
|
34
|
+
pl_Pvt = MapOffer(pl_Pvt)
|
|
35
|
+
pl_Pvt = pl_Pvt.with_columns(pl.when(pl.col('Offer_Price') > 0.0).then(pl.lit('Disc')).otherwise(pl.lit(' ')).alias('EOSS Discount'),)
|
|
36
|
+
pl_Pvt = pl_Pvt.with_columns(pl.when(pl.col('Offer_Price') > 0.0).then((pl.col('Unit Price') - pl.col('Offer_Price'))/pl.col('Unit Price')).otherwise(0).alias('Disc.P'),)
|
|
37
|
+
|
|
38
|
+
#pl_Pvt = pl_Pvt.rename({'Season Code':'Season Item'})
|
|
39
|
+
#pl_Pvt = pl_Pvt.rename({'Season':'Season Code'})
|
|
40
|
+
pl_Pvt = pl_Pvt.filter(pl.col('Season Code').is_in(mw.currentSeason))
|
|
41
|
+
#pl_Pvt = pl_Pvt.with_columns((pl_Pvt['Cumm. SaleQty'].abs() + pl_Pvt['Cumm. CostValue'].abs() + pl_Pvt['MTD SaleQty'].abs() + pl_Pvt['WTD SaleQty'].abs() + pl_Pvt['Closing Stock'].abs() + pl_Pvt['StockCost'].abs()).alias('ZeroFilter'),)
|
|
42
|
+
#pl_Pvt = pl_Pvt.filter(pl.col('ZeroFilter')>0)
|
|
43
|
+
|
|
44
|
+
pl_Pvt = pl_Pvt[mw.combined_report_columns]
|
|
45
|
+
pl_Pvt.write_csv(os.path.join(mw.output_folder,"Combined",f"{brand}_Combined_Report.csv"), separator=",")
|
|
46
|
+
s8 = pl_Pvt["Cumm. SaleQty"].sum()
|
|
47
|
+
s9 = pl_Pvt["Closing Stock"].sum()
|
|
48
|
+
all_text = all_text + f"UZ Report Done, Cumm Sale Qty {s8} Closing Stock {s9}\n"
|
|
49
|
+
progress_callback.emit(all_text)
|
|
50
|
+
return "Done."
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import os
|
|
2
|
+
import polars as pl
|
|
3
|
+
import ASHC_v3 as ashc
|
|
4
|
+
from ASHC_v3.Masters import VIMerchHier
|
|
5
|
+
from ASHC_v3.CommonFunction import MapOffer
|
|
6
|
+
from ASHC_v3.initiateConfig import initiateConfig
|
|
7
|
+
from ASHC_v3.SaleAndStockExtra import returnFirstAndLastPurchDate, returnUnitCost
|
|
8
|
+
from ASHReports.UtilReports.misc import PP2
|
|
9
|
+
|
|
10
|
+
def startCombinedReportWorker(mw, progress_callback):
|
|
11
|
+
brand = "VI"
|
|
12
|
+
all_text = ""
|
|
13
|
+
all_text = all_text + f"Combined Report Process Started for {brand}...\n"
|
|
14
|
+
progress_callback.emit(all_text)
|
|
15
|
+
# Get all user inputs
|
|
16
|
+
saleFileDir = mw.saleReportPath_lineedit.text()
|
|
17
|
+
stockFileDir = mw.stockReportPath_lineedit.text()
|
|
18
|
+
masterFileDir = mw.masterFolderPath_lineedit.text()
|
|
19
|
+
dataFileDir = mw.dataFolderPath_lineedit.text()
|
|
20
|
+
# Initiate Class parameters
|
|
21
|
+
initiateConfig(saleFileDir, stockFileDir, masterFileDir, dataFileDir, mw.output_folder)
|
|
22
|
+
ucs, ups, ucp = returnUnitCost()
|
|
23
|
+
dictFRD, dictLRD = returnFirstAndLastPurchDate()
|
|
24
|
+
|
|
25
|
+
pl_Pvt = PP2(mw, saleFileDir, stockFileDir, brand, ucs, ups, ucp, dictFRD, dictLRD)
|
|
26
|
+
pl_Pvt = VIMerchHier(pl_Pvt)
|
|
27
|
+
pl_Pvt = pl_Pvt.with_columns((pl_Pvt['Closing Stock'] + pl_Pvt['Cumm. SaleQty']).alias('Purchased'),)
|
|
28
|
+
pl_Pvt = pl_Pvt.with_columns(pl.col("Location Code").replace_strict(ashc.Status, return_dtype=pl.String, default=None).alias('Status'))
|
|
29
|
+
pl_Pvt = pl_Pvt.with_columns(pl.col("Style Code").cast(pl.String).str.replace_all('.0','',literal=True).alias('Style Code'),)
|
|
30
|
+
pl_Pvt = pl_Pvt.with_columns(pl.col("Colour Code").cast(pl.String).str.replace_all('.0','',literal=True).alias('Colour Code'),)
|
|
31
|
+
pl_Pvt = pl_Pvt.with_columns((pl.col('Style Code') + pl.col('Colour Code')).alias('RefCode'),)
|
|
32
|
+
pl_Pvt = pl_Pvt.with_columns((pl_Pvt['Country'] + pl_Pvt['RefCode']).alias('Combo2'),)
|
|
33
|
+
pl_Pvt = pl_Pvt.with_columns(pl.lit(0.0,dtype=pl.Float32).alias('Disc.P'),)
|
|
34
|
+
pl_Pvt = MapOffer(pl_Pvt)
|
|
35
|
+
pl_Pvt = pl_Pvt.with_columns(pl.when(pl.col('Offer_Price') > 0.0).then(pl.lit('Disc')).otherwise(pl.lit(' ')).alias('EOSS Discount'),)
|
|
36
|
+
pl_Pvt = pl_Pvt.with_columns(pl.when(pl.col('Offer_Price') > 0.0).then((pl.col('Unit Price') - pl.col('Offer_Price'))/pl.col('Unit Price')).otherwise(0).alias('Disc.P'),)
|
|
37
|
+
|
|
38
|
+
#pl_Pvt = pl_Pvt.rename({'Season Code':'Season Item'})
|
|
39
|
+
#pl_Pvt = pl_Pvt.rename({'Season':'Season Code'})
|
|
40
|
+
pl_Pvt = pl_Pvt.filter(pl.col('Season Code').is_in(mw.currentSeason))
|
|
41
|
+
#pl_Pvt = pl_Pvt.with_columns((pl_Pvt['Cumm. SaleQty'].abs() + pl_Pvt['Cumm. CostValue'].abs() + pl_Pvt['MTD SaleQty'].abs() + pl_Pvt['WTD SaleQty'].abs() + pl_Pvt['Closing Stock'].abs() + pl_Pvt['StockCost'].abs()).alias('ZeroFilter'),)
|
|
42
|
+
#pl_Pvt = pl_Pvt.filter(pl.col('ZeroFilter')>0)
|
|
43
|
+
|
|
44
|
+
pl_Pvt = pl_Pvt[mw.combined_report_columns]
|
|
45
|
+
pl_Pvt.write_csv(os.path.join(mw.output_folder,"Combined",f"{brand}_Combined_Report.csv"), separator=",")
|
|
46
|
+
s8 = pl_Pvt["Cumm. SaleQty"].sum()
|
|
47
|
+
s9 = pl_Pvt["Closing Stock"].sum()
|
|
48
|
+
all_text = all_text + f"VI Report Done, Cumm Sale Qty {s8} Closing Stock {s9}\n"
|
|
49
|
+
progress_callback.emit(all_text)
|
|
50
|
+
return "Done."
|