Since there was some varience between clients on the order of the headers, I reworked some sections to work off header names instead of hardcoded column letter/numbers

This commit is contained in:
Dan Dembinski
2019-06-28 13:24:25 -04:00
parent a287e7386f
commit 17894e82ea
3 changed files with 298 additions and 266 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -1,7 +1,7 @@
from openpyxl.styles import Font from openpyxl.styles import Font
from openpyxl.styles import PatternFill from openpyxl.styles import PatternFill
# from openpyxl.styles import numbers # from openpyxl.styles import numbers
from openpyxl.utils import get_column_letter
bold = Font(bold=True) bold = Font(bold=True)
@@ -65,13 +65,32 @@ def Format_Report(sheet, SSheader, columnFormat):
count += 1 count += 1
rowcount = 1 rowcount = 1
def Save_Report(wb, sheet, sheet2, sheet3, SSheader, columnFormat): def Save_Report(wb, sheet, sheet2, sheet3, SSheader, detail_header, columnFormat):
# adds total fields at bottom of report # adds total fields at bottom of report
summarylength = sheet.max_row summarylength = sheet.max_row
itemlength = sheet2.max_row itemlength = sheet2.max_row
productlength = sheet3.max_row productlength = sheet3.max_row
PrintQuantity = 0
for x in detail_header:
if x != "Printing Option: PrintingQuantity":
PrintQuantity += 1
else:
break
PrintQuantity += 1
ItemPrice = 0
for x in detail_header:
if x != "Item Price":
ItemPrice += 1
else:
break
ItemPrice += 1
PrintQuantityColumn = get_column_letter(PrintQuantity)
ItemPriceColumn = get_column_letter(ItemPrice)
lightGreen = 'ADFF2F' lightGreen = 'ADFF2F'
darkGreen = '006400' darkGreen = '006400'
@@ -82,8 +101,15 @@ def Save_Report(wb, sheet, sheet2, sheet3, SSheader, columnFormat):
sheet.cell(column = 8, row = summarylength+1).fill = PatternFill(start_color=lightGreen, end_color=darkGreen, fill_type='solid') sheet.cell(column = 8, row = summarylength+1).fill = PatternFill(start_color=lightGreen, end_color=darkGreen, fill_type='solid')
sheet.cell(column = 8, row= summarylength+1).font = Font(color=darkGreen) sheet.cell(column = 8, row= summarylength+1).font = Font(color=darkGreen)
sheet2.cell(column=7, row=itemlength + 1, value="=SUM(G2:G" + str(itemlength)+")") sheet2.cell(column=PrintQuantity, row=itemlength + 1, value="=SUM(" + PrintQuantityColumn + "2:" + PrintQuantityColumn + str(itemlength) + ")")
sheet2.cell(column=8, row=itemlength + 1, value="=SUM(H2:H" + str(itemlength)+")") sheet2.cell(column=ItemPrice, row=itemlength + 1, value="=SUM(" + ItemPriceColumn + "2:" + ItemPriceColumn + str(itemlength) + ")")
# sheet2.cell(column=PrintQuantity, row=itemlength + 1, value="=SUM(G2:G" + str(itemlength)+")")
# sheet2.cell(column=ItemPrice, row=itemlength + 1, value="=SUM(H2:H" + str(itemlength)+")")
# Format_Report misses this one. Whoops # Format_Report misses this one. Whoops
sheet2.cell(column=8, row=itemlength + 1).number_format = '$#,##0.00_);($#,##0.00)' sheet2.cell(column=8, row=itemlength + 1).number_format = '$#,##0.00_);($#,##0.00)'
@@ -109,6 +135,7 @@ def Save_Report(wb, sheet, sheet2, sheet3, SSheader, columnFormat):
sheet.cell(column=5, row=rowcount).number_format = '$#,##0.00_);($#,##0.00)' sheet.cell(column=5, row=rowcount).number_format = '$#,##0.00_);($#,##0.00)'
sheet.cell(column=6, row=rowcount).number_format = '$#,##0.00_);($#,##0.00)' sheet.cell(column=6, row=rowcount).number_format = '$#,##0.00_);($#,##0.00)'
sheet.cell(column=7, row=rowcount).number_format = '$#,##0.00_);($#,##0.00)' sheet.cell(column=7, row=rowcount).number_format = '$#,##0.00_);($#,##0.00)'
sheet.cell(column=8, row=rowcount).number_format = '$#,##0.00_);($#,##0.00)'
if rowcount < sheet.max_row: if rowcount < sheet.max_row:
rowcount += 1 rowcount += 1
count += 1 count += 1

24
main.py
View File

@@ -1,7 +1,7 @@
import requests import requests
from bs4 import BeautifulSoup as bs from bs4 import BeautifulSoup as bs
from openpyxl import workbook from openpyxl import workbook
from openpyxl.utils import get_column_letter
from WriteReport import * from WriteReport import *
from ClientSpecific import * from ClientSpecific import *
@@ -140,8 +140,6 @@ def Run_Report(ticket, URL, HOST, REPORT_FIELDS, wb, ws, ws2, DETAIL_REPORT_FIEL
for w in y.find_all('fval'): for w in y.find_all('fval'):
shippingcost.append(float(w.text)) shippingcost.append(float(w.text))
### THIS IS WHERE THE EXTRA SUMMARY TAB SECTION WAS ###
# Add columns to Summary Tab # Add columns to Summary Tab
ws.insert_cols(2) ws.insert_cols(2)
@@ -160,12 +158,21 @@ def Run_Report(ticket, URL, HOST, REPORT_FIELDS, wb, ws, ws2, DETAIL_REPORT_FIEL
count = count + 1 count = count + 1
# Production and Adjustment Charges # Production and Adjustment Charges
ItemPrice = 0
for x in detail_SSheader:
if x != "Item Price":
ItemPrice += 1
else:
break
ItemPrice += 1
ItemPriceColumn = get_column_letter(ItemPrice)
count = 1 count = 1
for row in ws: for row in ws:
if count != 1: if count != 1:
# value = "=SUMIF(A:A,'Item Detail'!A:A,'Item Detail'!H:H)" value = "=SUMIF('item Detail'!A:A,A" + str(count) + ",'Item Detail'!" + ItemPriceColumn + ":" + ItemPriceColumn + ")"
value = "=SUMIF('item Detail'!A:A,A" + str(count) + ",'Item Detail'!H:H)"
ws.cell(column=5, row=count, value=value) ws.cell(column=5, row=count, value=value)
value = "=H" + str(count) + "-E" + str(count) + "-F" + str(count) value = "=H" + str(count) + "-E" + str(count) + "-F" + str(count)
ws.cell(column=7, row=count, value = value) ws.cell(column=7, row=count, value = value)
@@ -178,7 +185,9 @@ def Run_Report(ticket, URL, HOST, REPORT_FIELDS, wb, ws, ws2, DETAIL_REPORT_FIEL
print("Getting Item Detail") print("Getting Item Detail")
for z in ExternalID: for z in ExternalID:
report_filter = """<filterNameOrXml>&lt;?xml version="1.0"?&gt; &lt;PFWebFilter:UserFilter xmlns:PFWebFilter="http://www.pageflex.com/schemas/2004/Storefront/UserFilters/20040817" filterClass="Items"&gt; &lt;PFWebFilter:Step publicFieldName="Order ID" query="ExactEquals" minValue=\"""" + z + """\" maxValue="" /&gt; &lt;/PFWebFilter:UserFilter&gt;</filterNameOrXml>""" # report_filter = """<filterNameOrXml>&lt;?xml version="1.0"?&gt; &lt;PFWebFilter:UserFilter xmlns:PFWebFilter="http://www.pageflex.com/schemas/2004/Storefront/UserFilters/20040817" filterClass="Items"&gt; &lt;PFWebFilter:Step publicFieldName="Order ID" query="ExactEquals" minValue=\"""" + z + """\" maxValue="" /&gt; &lt;/PFWebFilter:UserFilter&gt;</filterNameOrXml>"""
report_filter = """<filterNameOrXml>&lt;?xml version="1.0"?&gt; &lt;PFWebFilter:UserFilter xmlns:PFWebFilter="http://www.pageflex.com/schemas/2004/Storefront/UserFilters/20040817" filterClass="Items"&gt; &lt;PFWebFilter:Step publicFieldName="Order ID" query="ExactEquals" minValue=\"""" + z + """\" maxValue="" /&gt; &lt;PFWebFilter:Step publicFieldName="Item Status" query="ExactEquals" minValue=\"Shipped" maxValue="" /&gt; &lt;/PFWebFilter:UserFilter&gt;</filterNameOrXml>"""
send = """<?xml version="1.0" encoding="utf-8"?> send = """<?xml version="1.0" encoding="utf-8"?>
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" <soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope"> xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
@@ -223,6 +232,7 @@ def Run_Report(ticket, URL, HOST, REPORT_FIELDS, wb, ws, ws2, DETAIL_REPORT_FIEL
count += 1 count += 1
# Add Quantity and Item Price columns. Populate both based using SUMIF off of the Item Detail Tab # Add Quantity and Item Price columns. Populate both based using SUMIF off of the Item Detail Tab
ws3['A1'] = "Product Name" ws3['A1'] = "Product Name"
ws3['B1'] = "Quantity" ws3['B1'] = "Quantity"
ws3['C1'] = "Item Price" ws3['C1'] = "Item Price"
@@ -244,7 +254,7 @@ def Run_Report(ticket, URL, HOST, REPORT_FIELDS, wb, ws, ws2, DETAIL_REPORT_FIEL
# Finalize Spreadsheet and save # Finalize Spreadsheet and save
Format_Report(ws, summary_SSheader, summary_columnFormat) Format_Report(ws, summary_SSheader, summary_columnFormat)
Format_Report(ws2, detail_SSheader, detail_columnFormat) Format_Report(ws2, detail_SSheader, detail_columnFormat)
Save_Report(wb, ws, ws2, ws3, summary_SSheader, summary_columnFormat) Save_Report(wb, ws, ws2, ws3, summary_SSheader, detail_SSheader, summary_columnFormat)
def loadMenu(): def loadMenu():