fix: improved product information indexing
This commit is contained in:
@@ -42,7 +42,7 @@ def main(driver: WebDriver, logger = logging.getLogger('main')):
|
||||
sp = ServiceProvider.default()
|
||||
|
||||
class Status(Enum):
|
||||
IDLE = 0
|
||||
BUSY = 0
|
||||
READY = 1
|
||||
RUNNING = 2
|
||||
STANDBY = 3
|
||||
@@ -64,7 +64,7 @@ def main(driver: WebDriver, logger = logging.getLogger('main')):
|
||||
t1 = Timer()
|
||||
t2 = Timer()
|
||||
options = dict()
|
||||
status = Status.IDLE
|
||||
status = Status.BUSY
|
||||
|
||||
def begin(opts: dict, args: dict):
|
||||
nonlocal status
|
||||
@@ -141,23 +141,26 @@ def main(driver: WebDriver, logger = logging.getLogger('main')):
|
||||
class ProductInfo:
|
||||
def __init__(self, file):
|
||||
self.wb = openpyxl.load_workbook(file, read_only=True)
|
||||
self.headers = list()
|
||||
self.indices = dict()
|
||||
self.headers = dict()
|
||||
|
||||
def index(self, *keys: str):
|
||||
self.indices.clear()
|
||||
self.headers.clear()
|
||||
|
||||
for col in range(1, self.wb.active.max_column + 1):
|
||||
value = str(self.wb.active.cell(1, col).value)
|
||||
self.headers.append(value)
|
||||
|
||||
def search(self, by: str, needle) -> dict:
|
||||
a = self.headers.index(by)
|
||||
b = None
|
||||
if value in keys: self.headers[value] = col
|
||||
|
||||
for row in range(1, self.wb.active.max_row + 1):
|
||||
if self.wb.active.cell(row, a+1).value == needle:
|
||||
b = row
|
||||
break
|
||||
for key in keys:
|
||||
col = self.headers[key]
|
||||
value = str(self.wb.active.cell(row, col).value)
|
||||
self.indices.setdefault(key, dict())[value] = row
|
||||
|
||||
if b is None: return dict()
|
||||
return { k: self.wb.active.cell(b, c+1).value for c, k in enumerate(self.headers) }
|
||||
def at(self, by: str, index) -> dict:
|
||||
if (a := self.indices.get(by)) is None or (b := dict.get(a, index)) is None: return dict()
|
||||
return { k: self.wb.active.cell(b, c).value for k, c in self.headers.items() }
|
||||
|
||||
try:
|
||||
logger.info('Downloading product list...')
|
||||
@@ -183,6 +186,8 @@ def main(driver: WebDriver, logger = logging.getLogger('main')):
|
||||
p = ProductInfo(file)
|
||||
driver.close()
|
||||
driver.switch_to.window(driver.window_handles[0])
|
||||
logger.info('Indexing product information...')
|
||||
p.index('产品编号', '产品名称', '产品型号')
|
||||
logger.info('Done')
|
||||
status = Status.READY
|
||||
except Exception as e:
|
||||
@@ -416,7 +421,7 @@ def main(driver: WebDriver, logger = logging.getLogger('main')):
|
||||
match kind:
|
||||
case 'vat':
|
||||
record[8] = product
|
||||
record[9] = (p.search('产品型号', code) or p.search('产品名称', product)).get('产品编号')
|
||||
record[9] = (p.at('产品型号', code) or p.at('产品名称', product)).get('产品编号')
|
||||
record[10] = code
|
||||
record[11] = '%.2f' % price
|
||||
record[12] = '%g%%' % discount
|
||||
@@ -424,7 +429,7 @@ def main(driver: WebDriver, logger = logging.getLogger('main')):
|
||||
record[14] = '%g' % quantity
|
||||
record[15] = description
|
||||
case 'correction':
|
||||
record[8] = p.search('产品编号', profile.remise).get('产品名称')
|
||||
record[8] = p.at('产品编号', profile.remise).get('产品名称')
|
||||
record[9] = profile.remise
|
||||
record[13] = '0'
|
||||
record[14] = '0'
|
||||
|
||||
Reference in New Issue
Block a user