radboy 0.0.833__py3-none-any.whl → 0.0.854__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.

Potentially problematic release.


This version of radboy might be problematic. Click here for more details.

radboy/DB/Prompt.py CHANGED
@@ -59,7 +59,8 @@ def std_colorize(m,n,c,start=f'',end=''):
59
59
  '''
60
60
  '''Formula/Price menu options'''
61
61
  PRICE=['quick price','qprc','price','prc']
62
- FMLA=['fmlau','formulae-u','pre-formula','formulas']
62
+ FMLA=['fmlau','formulae-u','pre-formula','formulas','fmla']
63
+ HEALTHLOG=['healthlog','health log universal','healthlogu','healthloguniversal','hlu','health-log-universal']
63
64
  def timedout(ptext,htext='',timeout_returnable="timeout"):
64
65
  try:
65
66
  while True:
@@ -250,6 +251,48 @@ class Obfuscate:
250
251
  out.write(self.b64d)
251
252
  print("Finalized:",self.b64d)
252
253
  print("Saved to:",self.FILE)
254
+ return self.returnMsg(self.b64d.decode("utf-8"))
255
+
256
+ def readMsgFile(self):
257
+ try:
258
+ data=[]
259
+ FILE=db.detectGetOrSet("OBFUSCATED MSG FILE",value="MSG.txt",setValue=False,literal=True)
260
+ with open(FILE,"r") as fio:
261
+ ttl=0
262
+ for num,line in enumerate(fio.readlines()):
263
+ ttl=num
264
+ fio.seek(0)
265
+ counter=0
266
+ while True:
267
+
268
+ x=fio.readline()
269
+ data.append(x)
270
+ if not x:
271
+ break
272
+ try:
273
+ print(std_colorize(x,counter,ttl))
274
+ except Exception as ee:
275
+ print(x,ee)
276
+ counter+=1
277
+ return str(Obfuscate.returnMsg(None,''.join(data)))
278
+ except Exception as e:
279
+ print(e)
280
+
281
+
282
+ def returnMsg(self,data):
283
+ try:
284
+ d=Control(func=FormBuilderMkText,ptext=f'Return "{data}"',helpText="Hit Enter to save. return the data to the terminal for things like text2file",data="boolean")
285
+ print(d)
286
+ if d in ['NaN',None,False]:
287
+ return
288
+ elif d in ['d',]:
289
+ FILE=db.detectGetOrSet("OBFUSCATED MSG FILE",value="MSG.txt",setValue=False,literal=True)
290
+ with open(FILE,"w") as out:
291
+ out.write(data)
292
+ else:
293
+ return data
294
+ except Exception as e:
295
+ print(e)
253
296
 
254
297
  def decrypt(self):
255
298
  try:
@@ -264,6 +307,7 @@ class Obfuscate:
264
307
  cipher = AES.new(self.password,AES.MODE_ECB)
265
308
  self.decoded = unpad(cipher.decrypt(base64.b64decode(self.encoded)),16).decode("utf-8")
266
309
  print(f"'{self.decoded}'")
310
+ return self.returnMsg(self.decoded)
267
311
  except Exception as e:
268
312
  print(e)
269
313
 
@@ -284,6 +328,7 @@ class Obfuscate:
284
328
  helpText=f'''
285
329
  e,encrypt - make msg on INPUT and store in {self.FILE}
286
330
  de,decrypt - decrypt msg from {self.FILE}
331
+ rf,readfile - read data/msg from {self.FILE} and print to screen
287
332
  '''
288
333
  doWhat=Prompt.__init2__(None,func=FormBuilderMkText,ptext="Obfuscate Menu",helpText=helpText,data="str")
289
334
  if doWhat in [None,]:
@@ -294,6 +339,8 @@ de,decrypt - decrypt msg from {self.FILE}
294
339
  self.encrypt()
295
340
  elif doWhat.lower() in ['de','decrypt']:
296
341
  self.decrypt()
342
+ elif doWhat.lower() in ['rf','readfile']:
343
+ self.readMsgFile()
297
344
  else:
298
345
  print(helpText)
299
346
 
@@ -1020,6 +1067,13 @@ class Prompt(object):
1020
1067
  def cse(code):
1021
1068
  with Session(db.ENGINE) as session:
1022
1069
  query=session.query(db.Entry).filter(db.Entry.InList==True,or_(db.Entry.Code.icontains(code),db.Entry.Barcode.icontains(code),db.Entry.Name.icontains(code)))
1070
+ LookUpState=db.detectGetOrSet('list maker lookup order',False,setValue=False,literal=False)
1071
+ if not isinstance(LookUpState,bool):
1072
+ LookUpState=db.detectGetOrSet('list maker lookup order',False,setValue=True,literal=False)
1073
+ if LookUpState == True:
1074
+ results=results_query.order_by(db.Entry.Timestamp.asc(),db.Entry.Name,db.Entry.Barcode,db.Entry.Code,db.Entry.Description,db.Entry.Note)
1075
+ else:
1076
+ results=results_query.order_by(db.Entry.Timestamp.desc(),db.Entry.Name,db.Entry.Barcode,db.Entry.Code,db.Entry.Description,db.Entry.Note)
1023
1077
  results=query.all()
1024
1078
  ct=len(results)
1025
1079
  if ct < 1:
@@ -1158,9 +1212,9 @@ class Prompt(object):
1158
1212
  if not isinstance(LookUpState,bool):
1159
1213
  LookUpState=db.detectGetOrSet('list maker lookup order',False,setValue=True,literal=False)
1160
1214
  if LookUpState == True:
1161
- results=results_query.order_by(db.Entry.Timestamp.asc()).all()
1215
+ results=results_query.order_by(db.Entry.Timestamp.asc(),db.Entry.Name,db.Entry.Barcode,db.Entry.Code,db.Entry.Description,db.Entry.Note).all()
1162
1216
  else:
1163
- results=results_query.order_by(db.Entry.Timestamp.desc()).all()
1217
+ results=results_query.order_by(db.Entry.Timestamp.desc(),db.Entry.Name,db.Entry.Barcode,db.Entry.Code,db.Entry.Description,db.Entry.Note).all()
1164
1218
  ct=len(results)
1165
1219
  if ct < 1:
1166
1220
  msg=f"{Fore.light_steel_blue}Nothing in {Fore.slate_blue_1}Bld{Fore.light_red}LS!{Style.reset}"
@@ -1304,6 +1358,8 @@ class Prompt(object):
1304
1358
  {Fore.medium_spring_green}= {Fore.green_3a}NetPrice({total*decc(i.Price)+tax+crv:.{getcontext().prec}f}){Style.reset}
1305
1359
  {Fore.medium_violet_red}PercentOfTotal({super_total:.{getcontext().prec}f}%) of FinalTotal({getSuperTotal(results,location_fields,colormapped)['final total']})
1306
1360
  {Fore.orange_red_1}TaxRate({taxRate:.{getcontext().prec}f})={decc(taxRate*100):.{getcontext().prec}f}%{Style.reset}
1361
+ {Fore.light_cyan}Location = {Fore.light_steel_blue}{i.Location}{Style.reset}
1362
+ {Fore.grey_70}Note = \"\"\"\n{Fore.grey_50}{i.Note}{Fore.grey_70}\"\"\"{Style.reset}
1307
1363
  {'*'*os.get_terminal_size().columns}{Style.reset}"""
1308
1364
  if bldlse:
1309
1365
  db.logInput(msg,user=False,filter_colors=True,maxed_hfl=False,ofile=Prompt.bld_file)
@@ -2109,6 +2165,8 @@ class Prompt(object):
2109
2165
  continue
2110
2166
  elif cmd.lower() == 'obf msg':
2111
2167
  Obfuscate()
2168
+ elif cmd.lower() == 'obf msg rf':
2169
+ return func(Obfuscate.readMsgFile(Obfuscate),data)
2112
2170
  elif cmd.lower() in generate_cmds(startcmd=['dt','datetime',],endCmd=['of entry','oe']):
2113
2171
  dtoe=Control(func=FormBuilderMkText,ptext="Date String",helpText="a datestring",data="datetime")
2114
2172
  if dtoe in [None,"NaN"]:
@@ -2257,6 +2315,8 @@ class Prompt(object):
2257
2315
  return func(str(t),data)
2258
2316
  elif cmd.lower() in ['esu',]:
2259
2317
  TM.Tasks.TasksMode.Lookup()
2318
+ elif cmd.lower() in HEALTHLOG:
2319
+ TM.Tasks.TasksMode(parent=self,engine=db.ENGINE,init_only=True).healthlog()
2260
2320
  elif cmd.lower() in ['daylogu','dlu']:
2261
2321
  TM.Tasks.TasksMode(parent=self,engine=db.ENGINE,init_only=True).product_history()
2262
2322
  elif cmd.lower() in ['neu',]:
@@ -2416,10 +2476,18 @@ class Prompt(object):
2416
2476
  llo_modes=["dlu.cr","Prompt.lsbld","esu","t.[mksl||qsl||set Shelf||set Display]"]
2417
2477
  extra=f'''
2418
2478
  [Generation]
2419
- {Fore.grey_70}**{Fore.light_sea_green}'crbc',"checked random barcode"{Fore.light_yellow}- generate a random, but non-local-system existant barcode for input{Style.reset}
2420
- {Fore.grey_70}**{Fore.light_sea_green}'cruid',"checked uid"{Fore.light_yellow}- generate a uid, but non-local-system existant uid for input{Style.reset}
2479
+ {Fore.orange_red_1}--To Copy Codes--{Style.reset}
2421
2480
  {Fore.grey_70}**{Fore.light_sea_green}'bcd-gen','bcd-img'{Fore.light_yellow}- generate a custom barcode img from input data possible output is selected from {barcode.PROVIDED_BARCODES}{Style.reset}
2422
2481
  {Fore.grey_70}**{Fore.light_sea_green}'qr-gen','qr-img'{Fore.light_yellow}- generate a custom barcode img from input data possible output is selected{Style.reset}
2482
+ {Fore.grey_70}**{Fore.light_salmon_1}'cpcd cd128'{Fore.light_blue} cp barcode to Code128 and save to {Fore.light_green}the same as bcd-img{Style.reset}
2483
+ {Fore.grey_70}**{Fore.light_salmon_1}'cpcd cd39'{Fore.light_blue} cp barcode to Code39 and save to {Fore.light_green}the same as bcd-img{Style.reset}
2484
+ {Fore.grey_70}**{Fore.light_salmon_1}'cpcd upca'{Fore.light_blue} cp barcode to UPCA and save to {Fore.light_green}the same as bcd-img{Style.reset}
2485
+ {Fore.grey_70}**{Fore.light_salmon_1}'cpcd ean8'{Fore.light_blue} cp barcode to EAN8 and save to {Fore.light_green}the same as bcd-img{Style.reset}
2486
+ {Fore.grey_70}**{Fore.light_salmon_1}'cpcd ean13'{Fore.light_blue} cp barcode to EAN13 and save to {Fore.light_green}the same as bcd-img{Style.reset}
2487
+ {Fore.grey_70}**{Fore.light_salmon_1}'cpcd ean14'{Fore.light_blue} cp barcode to EAN14 and save to {Fore.light_green}the same as bcd-img{Style.reset}
2488
+ {Fore.orange_red_1}--Text && Code Generation--{Style.reset}
2489
+ {Fore.grey_70}**{Fore.light_sea_green}'crbc',"checked random barcode"{Fore.light_yellow}- generate a random, but non-local-system existant barcode for input{Style.reset}
2490
+ {Fore.grey_70}**{Fore.light_sea_green}'cruid',"checked uid"{Fore.light_yellow}- generate a uid, but non-local-system existant uid for input{Style.reset}
2423
2491
  {Fore.grey_70}**{Fore.light_sea_green}{','.join(generate_cmds(startcmd=["nano",],endCmd=["id",]))}{Fore.light_yellow} - generate collision resistance nano ids{Style.reset}
2424
2492
  {Fore.grey_70}**{Fore.light_sea_green}'upcify','format upc','fupc'{Fore.light_yellow} Format input text to look '{db.Entry.rebar(None,"TESTTEXTUPCA")}{Style.reset}'
2425
2493
  {Fore.grey_70}**{Fore.light_sea_green}'codify','format code','fcode'{Fore.light_yellow} Format input text to look '{db.Entry.cfmt(None,"TESTTEXT")}{Style.reset}'
@@ -2439,6 +2507,7 @@ class Prompt(object):
2439
2507
  {Fore.light_yellow}Don't Use {Fore.grey_70}**{Style.reset}
2440
2508
  {Fore.grey_70}**{Fore.light_green}sft{Fore.light_red}u{Fore.light_steel_blue} - search for text across whole DB and return it as input{Style.reset}
2441
2509
  {Fore.grey_70}**{Fore.light_green}ne{Fore.light_red}u{Fore.light_steel_blue} - create a new entry menu{Style.reset}
2510
+ {Fore.grey_70}**{Fore.light_green}{HEALTHLOG}{Fore.light_steel_blue} - open healthlog utility anywhere{Style.reset}
2442
2511
  {Fore.grey_70}**{Fore.light_green}bld{Fore.light_red}ls{Fore.light_steel_blue} - list all items with InList==True and has a location value above {Fore.light_red}0{Style.reset}
2443
2512
  {Fore.grey_70}**{Fore.light_green}s{Fore.light_red}bld{Fore.light_steel_blue} - search with barcode in all items with InList==True and has a location value above {Fore.light_red}0{Style.reset}
2444
2513
  {Fore.grey_70}**{Fore.light_green}"bldlse","builde","buildlse","build list export ","bld ls exp",'elsbld','export list build','exp ls bld','ebld'{Fore.light_steel_blue} - same as versions without export, but dumps list to {Path(Prompt.bld_file).absolute()}{Style.reset}
@@ -2460,6 +2529,7 @@ class Prompt(object):
2460
2529
  {Fore.grey_70}**{Fore.light_green}comm{Fore.light_steel_blue} - send an email message with gmail{Style.reset}
2461
2530
 
2462
2531
  {Fore.grey_70}**{Fore.light_steel_blue}obf msg {Fore.spring_green_3a}encrypted msgs via {db.detectGetOrSet("OBFUSCATED MSG FILE",value="MSG.txt",setValue=False,literal=True)} and Prompt Input{Style.reset}
2532
+ {Fore.grey_70}**{Fore.light_steel_blue}read {Fore.spring_green_3a}{db.detectGetOrSet("OBFUSCATED MSG FILE",value="MSG.txt",setValue=False,literal=True)} and return the string{Style.reset}
2463
2533
  {Fore.grey_70}**{Fore.light_green}{PRICE}{Fore.light_steel_blue} Calculate price information using user provided data for an arbitrary product who Data is not in the Entry table{Style.reset}
2464
2534
  {Fore.grey_70}**{Fore.light_green}{FMLA}{Fore.light_steel_blue} use some pre-built formulas for returning values to the prompt{Style.reset}
2465
2535
  {Fore.grey_70}** {Fore.light_steel_blue}{generate_cmds(startcmd=['simple','smpl'],endCmd=['scanner','scanr','scnnr','scnr'])} {Fore.light_green}a scanner recorder that only records the text,times scanned,and dtoe, and when when time permits, comment.{Style.reset}
@@ -2785,6 +2855,19 @@ Use an App Like Google Keep, or Notion, to Store a note with the Title as the Na
2785
2855
  resultant=db.Entry.cfmt(None,code)
2786
2856
  print(resultant)
2787
2857
  return func(resultant,data)
2858
+ elif cmd.lower() in ['cpcd cd128',]:
2859
+ TM.Tasks.TasksMode(parent=self,engine=db.ENGINE,init_only=True).bcd_img(cp2="code128")
2860
+ elif cmd.lower() in ['cpcd cd39',]:
2861
+ TM.Tasks.TasksMode(parent=self,engine=db.ENGINE,init_only=True).bcd_img(cp2="code39")
2862
+ elif cmd.lower() in ['cpcd upca',]:
2863
+ TM.Tasks.TasksMode(parent=self,engine=db.ENGINE,init_only=True).bcd_img(cp2="upca")
2864
+ elif cmd.lower() in ['cpcd ean13',]:
2865
+ TM.Tasks.TasksMode(parent=self,engine=db.ENGINE,init_only=True).bcd_img(cp2="ean13")
2866
+ elif cmd.lower() in ['cpcd ean8',]:
2867
+ TM.Tasks.TasksMode(parent=self,engine=db.ENGINE,init_only=True).bcd_img(cp2="ean8")
2868
+ elif cmd.lower() in ['cpcd ean14',]:
2869
+ TM.Tasks.TasksMode(parent=self,engine=db.ENGINE,init_only=True).bcd_img(cp2="ean14")
2870
+
2788
2871
  elif cmd.lower() in ['bcd-gen','bcd-img']:
2789
2872
  TM.Tasks.TasksMode(parent=self,engine=db.ENGINE,init_only=True).bcd_img()
2790
2873
  elif cmd.lower() in ['qr-gen','qr-img']:
Binary file
radboy/DB/db.py CHANGED
@@ -1844,13 +1844,13 @@ deducted from Total as remainder is to be filled from LOAD{Style.reset}
1844
1844
 
1845
1845
  def seeShort(self):
1846
1846
  rebar=self.rebar()
1847
- ROUNDTO=int(detectGetOrSet("TotalSpent ROUNDTO default",3,setValue=False,literal=True))
1848
- default_taxrate=float(detectGetOrSet("Tax Rate",0.0925,setValue=False,literal=True))
1849
- price=round(self.Price,ROUNDTO)+round(self.CRV,ROUNDTO)
1847
+ ROUNDTO=decc(detectGetOrSet("TotalSpent ROUNDTO default",3,setValue=False,literal=True))
1848
+ default_taxrate=decc(detectGetOrSet("Tax Rate",0.0925,setValue=False,literal=True))
1849
+ price=decc(self.Price)+decc(self.CRV)
1850
1850
 
1851
- formula=round(price+self.Tax,ROUNDTO)
1852
-
1853
- msg=f''' {Fore.slate_blue_1}{Style.underline}{'-'*5}{Style.reset}{Style.bold} Short Data {Style.reset}
1851
+ formula=decc(price+decc(self.Tax))
1852
+ location=f"{Fore.light_cyan}LCTN({Fore.light_steel_blue}{self.Location}{Fore.light_cyan})"
1853
+ msg=f''' {Fore.slate_blue_1}{Style.underline}{'-'*5}{Style.reset}{Style.bold} Short Data @ {location}{Style.reset}
1854
1854
  {Fore.light_yellow}Name({Fore.pale_green_1b}{self.Name}{Fore.light_yellow}) {Fore.light_magenta}Price Per Unit({Fore.slate_blue_1}prc={self.Price}{Fore.light_magenta},crv={self.CRV},tax={self.Tax},ttl={formula}){Style.reset} {Fore.misty_rose_3}EID({Fore.pale_green_1b}{self.EntryId}{Fore.light_yellow}) {Fore.spring_green_3a}[BCD/UPC[A/E]/EAN[8/13]/GTIN](cd={Fore.light_magenta}{rebar},{Fore.chartreuse_1}no_sep={self.rebar(skip_sep=True)}{Fore.spring_green_3a}){Style.reset}{Fore.slate_blue_1} -{Fore.cyan}> {Fore.orange_red_1}[SHELF/TAG/CIC/STR_CD]({Fore.light_red}cd={self.cfmt(self.Code)}{Fore.orange_red_1}){Style.reset}'''
1855
1855
  return msg
1856
1856
 
radboy/RNE/RNE.py CHANGED
@@ -461,6 +461,13 @@ class Expiration:
461
461
  print(e)
462
462
 
463
463
  def search_expo(self,returnable=False,code=None,group=True,past_due_only=False):
464
+ gtemp=group
465
+ group=Control(func=FormBuilderMkText,ptext="Group results?",helpText=f"default is {group}",data="boolean")
466
+ if group in [None,'NaN']:
467
+ return
468
+ elif group in ['d',]:
469
+ group=gtemp
470
+
464
471
  with Session(ENGINE) as session:
465
472
  while True:
466
473
  if code != None:
Binary file
@@ -279,6 +279,7 @@ class NEUSetter:
279
279
  'TaxNote',
280
280
  'CRV',
281
281
  'Name',
282
+ 'Note',
282
283
  'Location',
283
284
  'ALT_Barcode',
284
285
  'DUP_Barcode',
@@ -292,11 +293,15 @@ class NEUSetter:
292
293
  'Expiry',
293
294
  'BestBy',
294
295
  'AquisitionDate',
296
+ 'Tags',
295
297
  ]
296
298
  fields.extend(LOCATION_FIELDS)
299
+ fields=sorted(fields,key=str)
297
300
  fct=len(fields)
301
+ t={i.name:str(i.type).lower() for i in Entry.__table__.columns}
298
302
  for num,f in enumerate(fields):
299
- msg=f'{Fore.light_green}{num}/{Fore.light_yellow}{num+1} of {Fore.light_red}{fct} -> {Fore.turquoise_4}{f}{Style.reset}'
303
+
304
+ msg=std_colorize(f,num,fct)+f"{Fore.red}[{Fore.cyan}{t[f]}{Fore.red}]{Fore.light_yellow}!{Style.reset}"
300
305
  print(msg)
301
306
  fnames=[]
302
307
  which=Prompt.__init2__(None,func=FormBuilderMkText,ptext=f"which {Fore.light_green}index{Fore.light_red}({Fore.light_green}es{Fore.light_red}){Fore.light_yellow}?: ",helpText=f"which {Fore.light_green}index{Fore.light_red}({Fore.light_green}es{Fore.light_red}){Fore.light_yellow}, use comma to separate multiple fields{Style.reset}",data="list")
@@ -359,9 +364,15 @@ class NEUSetter:
359
364
  for fname in fnames:
360
365
  column=getattr(Entry,fname)
361
366
  oldprice=getattr(selected,'Price')
362
- newValue=Prompt.__init2__(None,func=FormBuilderMkText,ptext=f"[{Fore.medium_violet_red}old{Fore.light_yellow}] {Fore.light_magenta}{fname} = {Fore.light_red}{getattr(selected,fname)}{Fore.orange_red_1} to: {Style.reset}",helpText="new value",data=str(column.type))
367
+ if fname.lower() in ['tags','tag']:
368
+ TYPE="list"
369
+ else:
370
+ TYPE=str(column.type)
371
+ newValue=Prompt.__init2__(None,func=FormBuilderMkText,ptext=f"[{Fore.medium_violet_red}old{Fore.light_yellow}] {Fore.light_magenta}{fname} = {Fore.light_red}{getattr(selected,fname)}{Fore.orange_red_1} to: {Style.reset}",helpText="new value",data=TYPE)
363
372
  if newValue in [None,'d']:
364
373
  continue
374
+ if fname.lower() in ['tags','tag']:
375
+ newValue=json.dumps(newValue)
365
376
  if fname.lower() == 'tax':
366
377
  if not tax_adjusted:
367
378
  setattr(selected,fname,newValue)
radboy/TasksMode/Tasks.py CHANGED
@@ -53,6 +53,11 @@ from decimal import Decimal as DEC
53
53
  from radboy.DB.lsToday import *
54
54
  from radboy.DB.GEMINI import *
55
55
  from radboy.Unified.BACKUP import *
56
+ import scipy
57
+ import radboy.HealthLog as HL
58
+
59
+ UnitRegister=pint.UnitRegistry()
60
+ from pint import Quantity
56
61
 
57
62
  def today():
58
63
  dt=datetime.now()
@@ -491,17 +496,20 @@ class Formulae:
491
496
  return None
492
497
  else:
493
498
  returnTypes=["float","Decimal","string","string"]
494
- returnActor=[lambda x:round(float(x),4),lambda x:Decimal(x),lambda x: f"{x:.4f}",lambda x:str(x)]
499
+ returnActor=[lambda x:float(x),lambda x:Decimal(x),lambda x: f"{x:.4f}",lambda x:str(x)]
495
500
  ct=len(returnTypes)
496
501
  returnType=None
497
502
  htext=[]
498
503
  strOnly=False
504
+ tmp=[]
499
505
  for num,i in enumerate(returnTypes):
500
506
  try:
501
507
  htext.append(std_colorize(f"{i} - {returnActor[num](result)} ",num,ct))
502
508
  except Exception as e:
503
509
  strOnly=True
504
- print(e)
510
+ print(e,result,type(result))
511
+ if len(htext) < 2:
512
+ return str(result)
505
513
  htext='\n'.join(htext)
506
514
  while returnType not in range(0,ct+1):
507
515
  print(htext)
@@ -1096,7 +1104,7 @@ SALES TAX ON APPLICABLE TANGIBLE ITEMS = (PRICE + CRV) * TTL TAX RATE
1096
1104
  return None
1097
1105
  else:
1098
1106
  returnTypes=["float","Decimal","string","string"]
1099
- returnActor=[lambda x:round(float(x),4),lambda x:Decimal(x).quantize(Decimal("0.0000")),lambda x: f"{x:.4f}",lambda x:str(x)]
1107
+ returnActor=[lambda x:float(x),lambda x:Decimal(x).quantize(Decimal("0.0000")),lambda x: f"{x:.4f}",lambda x:str(x)]
1100
1108
  ct=len(returnTypes)
1101
1109
  returnType=None
1102
1110
  htext=[]
@@ -1106,7 +1114,10 @@ SALES TAX ON APPLICABLE TANGIBLE ITEMS = (PRICE + CRV) * TTL TAX RATE
1106
1114
  htext.append(std_colorize(f"{i} - {returnActor[num](result)} ",num,ct))
1107
1115
  except Exception as e:
1108
1116
  strOnly=True
1109
- print(e)
1117
+ print(e,result,type(result))
1118
+ if len(htext) < 2:
1119
+ return str(result)
1120
+
1110
1121
  htext='\n'.join(htext)
1111
1122
  while returnType not in range(0,ct+1):
1112
1123
  print(htext)
@@ -1536,6 +1547,9 @@ rmc.quikRn(rootdir=ROOTDIR)'''
1536
1547
  def cookbook(self):
1537
1548
  CookBookUi()
1538
1549
 
1550
+ def healthlog(self):
1551
+ HL.HealthLog.HealthLogUi()
1552
+
1539
1553
  def phonebook(self):
1540
1554
  PhoneBookUi()
1541
1555
 
@@ -3061,6 +3075,73 @@ so use {Fore.orange_red_1}ls-lq/ls Shelf {Fore.light_yellow}from {Fore.light_mag
3061
3075
  print(e)
3062
3076
 
3063
3077
  def setFieldInList_(self,fieldname,load=False,repack_exec=None,barcode=None,only_select_qty=False):
3078
+ auto=detectGetOrSet("list maker auto default",False,setValue=False,literal=False)
3079
+ ready=0
3080
+ auto_text=f" [a,auto] use current settings and set defaults for any unset settings from system storage."
3081
+ if not auto:
3082
+ ready+=1
3083
+ m=f'{Fore.orange_red_1}INIT({ready}){Fore.light_yellow} -> '
3084
+ #extras that are not always necessary
3085
+ use_dflt_location=Prompt.__init2__(None,func=lambda text,data:FormBuilderMkText(text=text,data=data,passThru=["auto","a","o","oneshot","1shot"],PassThru=True),ptext=f"{m}ask to search for {Fore.cyan}default Entry{Fore.light_yellow} Location ({Fore.light_sea_green}Where the Product was stored by you last){Fore.light_yellow}? [y/N({Fore.orange_red_1}d=default{Fore.light_yellow})]",helpText=f"a boolean value from either of (0,f,n,no,false,False) or (1,t,true,True,yes,y) or formula that equates to a True or a False; {auto_text}",data="boolean")
3086
+ if use_dflt_location in [None,]:
3087
+ return
3088
+ elif use_dflt_location in ["auto","a","o","oneshot","1shot"]:
3089
+ if use_dflt_location in ["o","oneshot","1shot"]:
3090
+ one_shot=True
3091
+ auto=True
3092
+ use_dflt_location=False
3093
+ elif use_dflt_location in ['d',False,]:
3094
+ use_dflt_location=False
3095
+ else:
3096
+ use_dflt_location=True
3097
+ else:
3098
+ use_dflt_location=False
3099
+
3100
+ if use_dflt_location:
3101
+ dfltLctn=Control(func=FormBuilderMkText,ptext="Default Location?",helpText="where is this the contents of this list being stored",data="string")
3102
+ if dfltLctn in ['NaN',None]:
3103
+ return
3104
+ elif dfltLctn in ['d','',' ']:
3105
+ xdflt="Not/Ass/Ign/Ed"
3106
+ else:
3107
+ xdflt=dfltLctn
3108
+ else:
3109
+ xdflt="Not/Ass/Ign/Ed"
3110
+
3111
+
3112
+ if not auto:
3113
+ ready+=1
3114
+ m=f'{Fore.orange_red_1}INIT({ready}){Fore.light_yellow} -> '
3115
+ #extras that are not always necessary
3116
+ use_employee=Prompt.__init2__(None,func=lambda text,data:FormBuilderMkText(text=text,data=data,passThru=["auto","a","o","oneshot","1shot"],PassThru=True),ptext=f"{m}ask to for {Fore.cyan}default Entry{Fore.light_yellow} Employee Name/Initials/EmployeeId# ({Fore.light_sea_green}{Fore.light_blue}what ever you signed the box with){Fore.light_yellow}? [y/N({Fore.orange_red_1}d=default{Fore.light_yellow})]",helpText=f"a boolean value from either of (0,f,n,no,false,False) or (1,t,true,True,yes,y) or formula that equates to a True or a False; {auto_text}",data="boolean")
3117
+ if use_employee in [None,]:
3118
+ return
3119
+ elif use_employee in ["auto","a","o","oneshot","1shot"]:
3120
+ if use_employee in ["o","oneshot","1shot"]:
3121
+ one_shot=True
3122
+ auto=True
3123
+ use_employee=False
3124
+ elif use_employee in ['d',False,]:
3125
+ use_employee=False
3126
+ else:
3127
+ use_employee=True
3128
+ else:
3129
+ use_employee=False
3130
+
3131
+ employee='DEFAULT EMPLOYEE/PERSONNEL'
3132
+ if use_employee:
3133
+ personnel=Control(func=FormBuilderMkText,ptext="Employee Name/Signature/EmployeeId?",helpText="how you are identified on your box",data="string")
3134
+ if personnel in ['NaN',None]:
3135
+ return
3136
+ elif personnel in ['d','',' ']:
3137
+ employee=""
3138
+ else:
3139
+ employee=personnel
3140
+ else:
3141
+ employee=detectGetOrSet("list maker default employee",'',setValue=False,literal=True)
3142
+
3143
+
3144
+ defaultLocation=detectGetOrSet("list maker default employee",xdflt,setValue=True,literal=True)
3064
3145
  #determine if ascending or descending by
3065
3146
  def hnf(resultx,fieldname,code):
3066
3147
  if isinstance(resultx,Entry):
@@ -3144,9 +3225,9 @@ so use {Fore.orange_red_1}ls-lq/ls Shelf {Fore.light_yellow}from {Fore.light_mag
3144
3225
  ptext=f'''{hafnhaf_l}
3145
3226
  {Fore.light_red}Enter {Style.bold}{Style.underline}{Fore.orange_red_1}Quantity/Formula{Style.reset} amount|+amount|-amount|a,+a,-a(advanced)|r,+r,-r(ReParseFormula) (Enter==1)|{Fore.light_green}ipcv={Fore.dark_goldenrod}PalletCount-value[{Fore.light_steel_blue}:-){Fore.dark_goldenrod}]|{Fore.light_green}iscv={Fore.dark_goldenrod}ShelfCount-value[{Fore.light_steel_blue}:-(){Fore.dark_goldenrod}]|{Fore.light_green}ilcv={Fore.dark_goldenrod}LoadCount-value[{Fore.light_steel_blue};-){Fore.dark_goldenrod}]|{Fore.light_green}iccv={Fore.dark_goldenrod}CaseCount-value[{Fore.light_steel_blue}:-P{Fore.dark_goldenrod}]|{Fore.light_green}ipcvc{Fore.dark_goldenrod}=(PalletCount-value)/CaseCount[{Fore.light_steel_blue}:-D{Fore.dark_goldenrod}]|{Fore.light_green}iscvc{Fore.dark_goldenrod}=(ShelfCount-value)/CaseCount[{Fore.light_steel_blue}:-|{Fore.dark_goldenrod}]|{Fore.light_green}ilcvc{Fore.dark_goldenrod}=(LoadCount-value)/CaseCount[{Fore.light_steel_blue}:-*{Fore.dark_goldenrod}]|{Fore.light_green}iccvc{Fore.dark_goldenrod}=(CaseCount-value)/CaseCount[{Fore.light_steel_blue}:O{Fore.dark_goldenrod}]{Style.reset}'''
3146
3227
  return ptext
3147
- ready=0
3228
+
3148
3229
  #ready+=1
3149
- auto=detectGetOrSet("list maker auto default",False,setValue=False,literal=False)
3230
+
3150
3231
  use_code=detectGetOrSet("list maker use code default",False,setValue=False,literal=False)
3151
3232
  use_casecount=detectGetOrSet("list maker use casecount default",False,setValue=False,literal=False)
3152
3233
  use_price=detectGetOrSet("list maker use price default",True,setValue=False,literal=False)
@@ -3158,7 +3239,7 @@ so use {Fore.orange_red_1}ls-lq/ls Shelf {Fore.light_yellow}from {Fore.light_mag
3158
3239
  ask_taxes=detectGetOrSet("list maker new item taxes default",False,setValue=False,literal=False)
3159
3240
  use_search=detectGetOrSet("list maker new item search default",False,setValue=False,literal=False)
3160
3241
  one_shot=detectGetOrSet("list maker one shot default",False,setValue=False,literal=False)
3161
- auto_text=f" [a,auto] use current settings and set defaults for any unset settings from system storage."
3242
+
3162
3243
  m=f'{Fore.orange_red_1}INIT({ready}){Fore.light_yellow} -> '
3163
3244
  #names that are not always necessary
3164
3245
  if not auto:
@@ -3960,6 +4041,8 @@ Location Fields:
3960
4041
  continue
3961
4042
 
3962
4043
  if isinstance(result,Entry):
4044
+ result.location=defaultLocation
4045
+ result.Note+=f"Name|Signature|EmployeeId:{employee}\nToday: {datetime.now().ctime()}\n"
3963
4046
  if result.Price is None:
3964
4047
  result.Price=0
3965
4048
  if result.Tax is None:
@@ -4036,21 +4119,25 @@ Location Fields:
4036
4119
  continue
4037
4120
  def mkLT(text,data):
4038
4121
  return text
4039
- note=''
4122
+ note=f""
4040
4123
  if use_notes:
4041
- note=Prompt.__init2__(None,func=mkLT,ptext=f"Note's? ",helpText="temporary note about item, if any.",data=code)
4042
- if note in [None,]:
4124
+ nte=Prompt.__init2__(None,func=mkLT,ptext=f"Note's? ",helpText="temporary note about item, if any.",data=code)
4125
+ if nte in [None,]:
4043
4126
  continue
4127
+ note+=nte
4044
4128
 
4045
4129
  try:
4046
4130
  color1=Fore.light_red
4047
4131
  color2=Fore.orange_red_1
4048
4132
  color3=Fore.cyan
4049
4133
  color4=Fore.green_yellow
4134
+ result.Note+=f"\n{fieldname} = '{text}'\n"
4050
4135
  if text.startswith("-") or text.startswith("+"):
4051
4136
  #result=session.query(Entry).filter(or_(Entry.Barcode==code,Entry.Code==code,Entry.ALT_Barcode==code)).first()
4052
4137
  #sore
4053
4138
  if result:
4139
+ result.Location=defaultLocation
4140
+ #result.Note+=f"Name|Signature|EmployeeId:{employee}\nToday: {datetime.now().ctime()}\n"
4054
4141
  if suffix.lower() in ['c',]:
4055
4142
  if result.CaseCount in [None,]:
4056
4143
  result.CaseCount=1
@@ -4085,6 +4172,8 @@ Location Fields:
4085
4172
  if isinstance(replacement,int):
4086
4173
  result=session.query(Entry).filter(Entry.EntryId==replacement).first()
4087
4174
  if result:
4175
+ result.Location=defaultLocation
4176
+ result.Note+=f"Name|Signature|EmployeeId:{employee}\nToday: {datetime.now().ctime()}\n"
4088
4177
  setattr(result,fieldname,getattr(result,fieldname)+float(value))
4089
4178
  result.InList=True
4090
4179
  session.commit()
@@ -4129,7 +4218,8 @@ Location Fields:
4129
4218
  icc=1
4130
4219
  if not use_price:
4131
4220
  iprice=0
4132
- n=Entry(Barcode=code,Code=icode,Price=iprice,Note=note+"\nNew Item",Tax=tax,CRV=crv,Name=name,CaseCount=icc,InList=True)
4221
+ note+=f"Name|Signature|EmployeeId:{employee}\nToday: {datetime.now().ctime()}\n"
4222
+ n=Entry(Barcode=code,Code=icode,Price=iprice,Note=note+"\nNew Item",Location=defaultLocation,Tax=tax,CRV=crv,Name=name,CaseCount=icc,InList=True)
4133
4223
  setattr(n,fieldname,value)
4134
4224
  session.add(n)
4135
4225
  session.commit()
@@ -4149,6 +4239,8 @@ Location Fields:
4149
4239
  #result=session.query(Entry).filter(or_(Entry.Barcode==code,Entry.Code==code,Entry.ALT_Barcode==code)).first()
4150
4240
  #sore
4151
4241
  if result:
4242
+ result.Location=defaultLocation
4243
+ #result.Note+=f"Name|Signature|EmployeeId:{employee}\nToday: {datetime.now().ctime()}\n"
4152
4244
  if suffix.lower() in ['c',]:
4153
4245
  if result.CaseCount in [None,]:
4154
4246
  result.CaseCount=1
@@ -4185,6 +4277,8 @@ Location Fields:
4185
4277
  if isinstance(replacement,int):
4186
4278
  result=session.query(Entry).filter(Entry.EntryId==replacement).first()
4187
4279
  if result:
4280
+ result.Location=defaultLocation
4281
+ result.Note+=f"Name|Signature|EmployeeId:{employee}\nToday: {datetime.now().ctime()}\n"
4188
4282
  setattr(result,fieldname,getattr(result,fieldname)+float(value))
4189
4283
  result.InList=True
4190
4284
  session.commit()
@@ -4230,7 +4324,8 @@ Location Fields:
4230
4324
  icc=1
4231
4325
  if not use_price:
4232
4326
  iprice=0
4233
- n=Entry(Barcode=code,Code=icode,Price=iprice,Note=note+"\nNew Item",Tax=tax,CRV=crv,Name=name,CaseCount=icc,InList=True)
4327
+ note+=f"Name|Signature|EmployeeId:{employee}\nToday: {datetime.now().ctime()}\n"
4328
+ n=Entry(Barcode=code,Code=icode,Price=iprice,Note=note+"\nNew Item",Location=defaultLocation,Tax=tax,CRV=crv,Name=name,CaseCount=icc,InList=True)
4234
4329
  #n=Entry(Barcode=code,Code=icode,Note=note+"\nNew Item",Name=name,Price=iprice,CaseCount=icc,InList=True)
4235
4330
  setattr(n,fieldname,value)
4236
4331
  session.add(n)
@@ -6576,26 +6671,35 @@ Do What? [rms,rma,edit/e,<ENTER>/next,prev]"""
6576
6671
  else:
6577
6672
  print(f"{Fore.light_steel_blue}Qty was still {Fore.orange_red_1}{Qty}{Style.reset}")
6578
6673
 
6579
- def bcd_img(self):
6674
+ def bcd_img(self,cp2=None):
6580
6675
  SUPPORTEDOUT=barcode.PROVIDED_BARCODES
6581
6676
  final_out=detectGetOrSet("IMG_GEN_OUT","GENERATED_BCD",literal=True)
6582
6677
  ct=len(SUPPORTEDOUT)
6583
- for num,i in enumerate(SUPPORTEDOUT):
6584
- msg=f'''{Fore.medium_violet_red}{num}{Fore.light_magenta}/{num+1} of {Fore.dark_goldenrod}{ct} -> {Fore.light_green}{i}{Style.reset}'''
6585
- print(msg)
6586
- which=Prompt.__init2__(None,func=FormBuilderMkText,ptext=f"Which {Fore.medium_violet_red}index? {Fore.light_yellow}",helpText="which {Fore.medium_violet_red}index? {Fore.light_yellow}",data="integer")
6587
- if which in [None,'d']:
6588
- return
6678
+ if cp2 is None:
6679
+ for num,i in enumerate(SUPPORTEDOUT):
6680
+ msg=f'''{Fore.medium_violet_red}{num}{Fore.light_magenta}/{num+1} of {Fore.dark_goldenrod}{ct} -> {Fore.light_green}{i}{Style.reset}'''
6681
+ print(msg)
6682
+ which=Prompt.__init2__(None,func=FormBuilderMkText,ptext=f"Which {Fore.medium_violet_red}index? {Fore.light_yellow}",helpText="which {Fore.medium_violet_red}index? {Fore.light_yellow}",data="integer")
6683
+ if which in [None,'d']:
6684
+ which=SUPPORTEDOUT.index("code128")
6589
6685
  try:
6590
6686
  data=Prompt.__init2__(None,func=FormBuilderMkText,ptext="What data do you wish to encode?",helpText="its just text.",data="string")
6591
6687
  options={}
6592
6688
  options['writer']=barcode.writer.ImageWriter()
6593
6689
  if data in ['d',None]:
6594
6690
  return
6595
- if SUPPORTEDOUT[which] == 'code39':
6596
- options['add_checksum']=False
6597
-
6598
- bcd_class=barcode.get_class(SUPPORTEDOUT[which])
6691
+ if cp2 is None:
6692
+ if SUPPORTEDOUT[which] == 'code39':
6693
+ options['add_checksum']=False
6694
+ else:
6695
+ if cp2 == "code39":
6696
+ options['add_checksum']=False
6697
+
6698
+ if cp2 is None:
6699
+ bcd_class=barcode.get_class(SUPPORTEDOUT[which])
6700
+ else:
6701
+ bcd_class=barcode.get_class(cp2)
6702
+
6599
6703
  cde=bcd_class(data,**options)
6600
6704
  cde.save(final_out)
6601
6705
  print(f"Saved to '{final_out}'!")
@@ -6729,6 +6833,10 @@ CD4E(str_code_or_id,shrt=True/False) -> Retrieves the Entry for an Entry(s) Code
6729
6833
  if no item is found, then an un-commited Entry is returned; Entry('NOT FOUND','ERROR 404').
6730
6834
  if no item is selected, then an un-commited Entry is returned; Entry('No Selection','Nothing Selected').
6731
6835
  if an exception prevents operation, then an un-commited Entry is returned; Entry('EXCEPTION','Exception').
6836
+
6837
+ CVT(value,str_in,str_out) - specifically a part of evaluateFormula()
6838
+ UnitRegistry - pint.UnitRegistry
6839
+ Quantity() - pint.Quantity for normalized values
6732
6840
  {Style.reset}'''
6733
6841
  def mkValue(text,self):
6734
6842
  try:
radboy/Unified/BACKUP.py CHANGED
@@ -236,6 +236,13 @@ rmc.quikRn(rootdir=ROOTDIR)'''.encode()
236
236
  print(f"{Fore.spring_green_3b}Adding {Fore.green_yellow}{export_folder}{Style.reset}")
237
237
  gzf.add(export_folder)
238
238
 
239
+ defFile=db.detectGetOrSet("currency_definitions_file","currency_definitions.txt",setValue=False,literal=True)
240
+ if defFile:
241
+ defFile=Path(defFile)
242
+ if defFile.exists() and defFile.is_file():
243
+ print(f"{Fore.spring_green_3b}Adding {Fore.green_yellow}{defFile}{Style.reset}")
244
+ gzf.add(defFile)
245
+
239
246
  bootable="__bootable__.py"
240
247
  if bootable:
241
248
  bootable=Path(bootable)
radboy/Unified/bareCA.py CHANGED
@@ -109,6 +109,7 @@ def bare_ca(self,inList=False,protect_unassigned=True):
109
109
  'Expiry':None,
110
110
  'BestBy':None,
111
111
  'AquisitionDate':None,
112
+ 'Location':'///',
112
113
  })
113
114
  else:
114
115
  result=session.query(db.Entry).filter(db.Entry.InList==True,db.Entry.Code!="UNASSIGNED_TO_NEW_ITEM").update({
@@ -138,6 +139,7 @@ def bare_ca(self,inList=False,protect_unassigned=True):
138
139
  'Expiry':None,
139
140
  'BestBy':None,
140
141
  'AquisitionDate':None,
142
+ 'Location':'///',
141
143
  })
142
144
  else:
143
145
  if not protect_unassigned:
@@ -168,6 +170,7 @@ def bare_ca(self,inList=False,protect_unassigned=True):
168
170
  'Expiry':None,
169
171
  'BestBy':None,
170
172
  'AquisitionDate':None,
173
+ 'Location':'///',
171
174
  })
172
175
  else:
173
176
  result=session.query(db.Entry).filter(db.Entry.Code!="UNASSIGNED_TO_NEW_ITEM").update(
@@ -197,6 +200,7 @@ def bare_ca(self,inList=False,protect_unassigned=True):
197
200
  'Expiry':None,
198
201
  'BestBy':None,
199
202
  'AquisitionDate':None,
203
+ 'Location':'///',
200
204
  })
201
205
  session.commit()
202
206
  session.flush()
@@ -229,7 +233,8 @@ def bare_ca(self,inList=False,protect_unassigned=True):
229
233
  'CHKSTND_SPLY':0,
230
234
  'Expiry':None,
231
235
  'BestBy':None,
232
- 'AquisitionDate':None,})
236
+ 'AquisitionDate':None,
237
+ 'Location':'///',})
233
238
  session.commit()
234
239
  session.flush()
235
240
  r=query.all()
@@ -261,7 +266,8 @@ def bare_ca(self,inList=False,protect_unassigned=True):
261
266
  'CHKSTND_SPLY':0,
262
267
  'Expiry':None,
263
268
  'BestBy':None,
264
- 'AquisitionDate':None,}
269
+ 'AquisitionDate':None,
270
+ 'Location':'///',}
265
271
  )
266
272
  session.commit()
267
273
  session.flush()
@@ -104,6 +104,7 @@ def clear_all(self):
104
104
  'Expiry':None,
105
105
  'BestBy':None,
106
106
  'AquisitionDate':None,
107
+ 'Location':'///',
107
108
  })
108
109
  session.commit()
109
110
  session.flush()
radboy/__init__.py CHANGED
@@ -1 +1 @@
1
- VERSION='0.0.833'
1
+ VERSION='0.0.854'
Binary file
radboy/code.png CHANGED
Binary file
@@ -27,6 +27,11 @@ preloader={
27
27
  'desc':f'return a selected drug text',
28
28
  'exec':drug_text
29
29
  },
30
+ f'{uuid1()}':{
31
+ 'cmds':['golden-ratio','gldn rto',],
32
+ 'desc':f'get the golden ration for a measurement',
33
+ 'exec':golden_ratio
34
+ },
30
35
  f'{uuid1()}':{
31
36
  'cmds':['volume pint',],
32
37
  'desc':f'find the volume of height*width*length using pint to normalize the values',
@@ -57,12 +62,32 @@ preloader={
57
62
  'desc':f'now to percent time, or time to go',
58
63
  'exec':ndtp
59
64
  },
65
+ f'{uuid1()}':{
66
+ 'cmds':['currency conversion','cur-cvt'],
67
+ 'desc':f'convert currency from one to the another',
68
+ 'exec':currency_conversion,
69
+ },
70
+ f'{uuid1()}':{
71
+ 'cmds':['sonofman-bible','sonofman','bible','bbl'],
72
+ 'desc':f'open sonofman bible',
73
+ 'exec':bible_try,
74
+ },
75
+ f'{uuid1()}':{
76
+ 'cmds':['sales floor location','sls flr lctn'],
77
+ 'desc':f'generate a sales floor location string',
78
+ 'exec':SalesFloorLocationString,
79
+ },
80
+ f'{uuid1()}':{
81
+ 'cmds':['backroom location','br lctn'],
82
+ 'desc':f'generate a backroom location string',
83
+ 'exec':BackroomLocation,
84
+ },
60
85
  f'{uuid1()}':{
61
86
  'cmds':['generic item or service text template','txt gios '],
62
87
  'desc':f'find the cost to run a device per day',
63
88
  'exec':generic_service_or_item
64
89
  },
65
- f'{uuid1()}':{
90
+ f'{uuid1()}':{
66
91
  'cmds':['reciept book entry','rbe'],
67
92
  'desc':f'reciept book data to name template',
68
93
  'exec':reciept_book_entry,
@@ -27,7 +27,7 @@ import itertools
27
27
  import decimal
28
28
  from decimal import localcontext,Decimal
29
29
  unit_registry=pint.UnitRegistry()
30
- import math
30
+ import math,scipy
31
31
  from radboy.HowDoYouDefineMe.CoreEmotions import *
32
32
 
33
33
  def volume():
@@ -1674,21 +1674,26 @@ def drug_text():
1674
1674
  for line in reader:
1675
1675
  for sub in line:
1676
1676
  if sub not in ['',]:
1677
+ sub=f"{sub} {Fore.light_green}[{Fore.cyan}{extra_drugs}{Fore.light_green}]{Fore.dark_goldenrod}"
1677
1678
  drug_names.append(sub)
1678
1679
 
1679
-
1680
-
1680
+ excludes_drn=['',' ',None,'\n','\r\n','\t',]
1681
+ rdr_state=db.detectGetOrSet('list maker lookup order',False,setValue=False,literal=False)
1682
+ if rdr_state:
1683
+ drug_names=list(sorted(set([i for i in drug_names if i not in excludes_drn]),key=str))
1684
+ else:
1685
+ drug_names=list(reversed(sorted(set([i for i in drug_names if i not in excludes_drn]),key=str)))
1681
1686
  htext=[]
1682
1687
  cta=len(drug_names)
1683
1688
  for num,i in enumerate(drug_names):
1684
1689
  htext.append(std_colorize(i,num,cta))
1685
1690
  htext='\n'.join(htext)
1686
- print(htext)
1687
- which=Control(func=FormBuilderMkText,ptext="which index?",helpText=htext,data="integer")
1691
+
1692
+ which=Control(func=FormBuilderMkText,ptext=f"{htext}\n{Fore.yellow}which index?",helpText=htext,data="integer")
1688
1693
  if which in [None,'NaN']:
1689
1694
  return
1690
1695
 
1691
- return drug_names[which]
1696
+ return strip_colors(drug_names[which])
1692
1697
  except Exception as e:
1693
1698
  print(e)
1694
1699
  continue
@@ -1786,4 +1791,323 @@ def USCurrencyMassValues():
1786
1791
 
1787
1792
  except Exception as e:
1788
1793
  print(e)
1789
- continue
1794
+ continue
1795
+
1796
+
1797
+ def golden_ratio():
1798
+ msg=''
1799
+ while True:
1800
+ try:
1801
+ fields={
1802
+ 'measurement':{
1803
+ 'type':'dec.dec',
1804
+ 'default':48,
1805
+ },
1806
+ }
1807
+ fd=FormBuilder(data=fields,passThruText=msg)
1808
+ if fd is None:
1809
+ return
1810
+ side1_value=(decc(fd['measurement'])/decc(scipy.constants.golden_ratio))
1811
+ side2_value=fd['measurement']-decc(side1_value)
1812
+ which=Control(func=FormBuilderMkText,ptext=f"Which side do you wish to return [for a side of {fd['measurement']}: side1_value={side1_value},side2_value={side2_value}]?",helpText="yes/1/true=side 1,side 2 is false/no/0",data="boolean")
1813
+ if which in [None,"NaN"]:
1814
+ return
1815
+ elif which:
1816
+ return side1_value
1817
+ else:
1818
+ return side2_value
1819
+ except Exception as e:
1820
+ print(e)
1821
+
1822
+
1823
+ def currency_conversion():
1824
+ cvt_registry=pint.UnitRegistry()
1825
+
1826
+ definition=f'''
1827
+ USD = [currency]
1828
+ Argentine_Peso = nan usd
1829
+ Australian_Dollar = nan usd
1830
+ Bahraini_Dinar = nan usd
1831
+ Botswana_Pula = nan usd
1832
+ Brazilian_Real = nan usd
1833
+ British_Pound = nan usd
1834
+ Bruneian_Dollar = nan usd
1835
+ Bulgarian_Lev = nan usd
1836
+ Canadian_Dollar = nan usd
1837
+ Chilean_Peso = nan usd
1838
+ Chinese_Yuan_Renminbi = nan usd
1839
+ Colombian_Peso = nan usd
1840
+ Czech_Koruna = nan usd
1841
+ Danish_Krone = nan usd
1842
+ Emirati_Dirham = nan usd
1843
+ Euro = nan usd
1844
+ Hong_Kong_Dollar = nan usd
1845
+ Hungarian_Forint = nan usd
1846
+ Icelandic_Krona = nan usd
1847
+ Indian_Rupee = nan usd
1848
+ Indonesian_Rupiah = nan usd
1849
+ Iranian_Rial = nan usd
1850
+ Israeli_Shekel = nan usd
1851
+ Japanese_Yen = nan usd
1852
+ Kazakhstani_Tenge = nan usd
1853
+ Kuwaiti_Dinar = nan usd
1854
+ Libyan_Dinar = nan usd
1855
+ Malaysian_Ringgit = nan usd
1856
+ Mauritian_Rupee = nan usd
1857
+ Mexican_Peso = nan usd
1858
+ Nepalese_Rupee = nan usd
1859
+ New_Zealand_Dollar = nan usd
1860
+ Norwegian_Krone = nan usd
1861
+ Omani_Rial = nan usd
1862
+ Pakistani_Rupee = nan usd
1863
+ Philippine_Peso = nan usd
1864
+ Polish_Zloty = nan usd
1865
+ Qatari_Riyal = nan usd
1866
+ Romanian_New_Leu = nan usd
1867
+ Russian_Ruble = nan usd
1868
+ Saudi_Arabian_Riyal = nan usd
1869
+ Singapore_Dollar = nan usd
1870
+ South_African_Rand = nan usd
1871
+ South_Korean_Won = nan usd
1872
+ Sri_Lankan_Rupee = nan usd
1873
+ Swedish_Krona = nan usd
1874
+ Swiss_Franc = nan usd
1875
+ Taiwan_New_Dollar = nan usd
1876
+ Thai_Baht = nan usd
1877
+ Trinidadian_Dollar = nan usd
1878
+ Turkish_Lira = nan usd
1879
+
1880
+ @context FX
1881
+ Argentine_Peso = 0.000671 usd
1882
+ Australian_Dollar = 0.651104 usd
1883
+ Bahraini_Dinar = 2.659574 usd
1884
+ Botswana_Pula = 0.070042 usd
1885
+ Brazilian_Real = 0.185537 usd
1886
+ British_Pound = 1.330948 usd
1887
+ Bruneian_Dollar = 0.769854 usd
1888
+ Bulgarian_Lev = 0.594475 usd
1889
+ Canadian_Dollar = 0.714527 usd
1890
+ Chilean_Peso = 0.001062 usd
1891
+ Chinese_Yuan_Renminbi = 0.140424 usd
1892
+ Colombian_Peso = 0.000259 usd
1893
+ Czech_Koruna = 0.047793 usd
1894
+ Danish_Krone = 0.155642 usd
1895
+ Emirati_Dirham = 0.272294 usd
1896
+ Euro = 1.162692 usd
1897
+ Hong_Kong_Dollar = 0.128701 usd
1898
+ Hungarian_Forint = 0.002981 usd
1899
+ Icelandic_Krona = 0.008119 usd
1900
+ Indian_Rupee = 0.011384 usd
1901
+ Indonesian_Rupiah = 0.00006 usd
1902
+ Iranian_Rial = 0.000024 usd
1903
+ Israeli_Shekel = 0.304734 usd
1904
+ Japanese_Yen = 0.006545 usd
1905
+ Kazakhstani_Tenge = 0.00186 usd
1906
+ Kuwaiti_Dinar = 3.261214 usd
1907
+ Libyan_Dinar = 0.183824 usd
1908
+ Malaysian_Ringgit = 0.236753 usd
1909
+ Mauritian_Rupee = 0.02197 usd
1910
+ Mexican_Peso = 0.054181 usd
1911
+ Nepalese_Rupee = 0.007112 usd
1912
+ New_Zealand_Dollar = 0.575051 usd
1913
+ Norwegian_Krone = 0.099905 usd
1914
+ Omani_Rial = 2.603489 usd
1915
+ Pakistani_Rupee = 0.003531 usd
1916
+ Philippine_Peso = 0.017016 usd
1917
+ Polish_Zloty = 0.274017 usd
1918
+ Qatari_Riyal = 0.274725 usd
1919
+ Romanian_New_Leu = 0.228593 usd
1920
+ Russian_Ruble = 0.012559 usd
1921
+ Saudi_Arabian_Riyal = 0.266667 usd
1922
+ Singapore_Dollar = 0.769854 usd
1923
+ South_African_Rand = 0.057932 usd
1924
+ South_Korean_Won = 0.000695 usd
1925
+ Sri_Lankan_Rupee = 0.003293 usd
1926
+ Swedish_Krona = 0.106347 usd
1927
+ Swiss_Franc = 1.256685 usd
1928
+ Taiwan_New_Dollar = 0.032417 usd
1929
+ Thai_Baht = 0.030604 usd
1930
+ Trinidadian_Dollar = 0.147095 usd
1931
+ Turkish_Lira = 0.023829 usd
1932
+ @end'''.lower()
1933
+ defFile=db.detectGetOrSet("currency_definitions_file","currency_definitions.txt",setValue=False,literal=True)
1934
+ if defFile is None:
1935
+ return
1936
+ defFile=Path(defFile)
1937
+ with open(defFile,"w") as out:
1938
+ out.write(definition)
1939
+ cvt_registry.load_definitions(defFile)
1940
+ with cvt_registry.context("fx") as cvtr:
1941
+ while True:
1942
+ try:
1943
+ htext=[]
1944
+ definition=definition.split("@context FX")[-1].replace('\n@end','')
1945
+ cta=len(definition.split("\n"))
1946
+ formats='\n'.join([std_colorize(i,num,cta) for num,i in enumerate(definition.split("\n"))])
1947
+
1948
+ formats=f'''Conversion Formats are:\n{formats}\n'''
1949
+ fields={
1950
+ 'value':{
1951
+ 'default':1,
1952
+ 'type':'float',
1953
+ },
1954
+ 'FromString':{
1955
+ 'default':'USD',
1956
+ 'type':'string',
1957
+ },
1958
+ 'ToString':{
1959
+ 'default':'Euro',
1960
+ 'type':'string'
1961
+ },
1962
+ }
1963
+ fb=FormBuilder(data=fields,passThruText=formats)
1964
+ if fb is None:
1965
+ return
1966
+
1967
+ return_string=fb['ToString'].lower()
1968
+ value_string=f"{fb['value']} {fb['FromString']}".lower()
1969
+ resultant=cvtr.Quantity(value_string).to(return_string)
1970
+
1971
+ #if it gets here return None
1972
+ return resultant
1973
+ except Exception as e:
1974
+ print(e)
1975
+
1976
+ def bible_try():
1977
+ try:
1978
+ os.system("sonofman")
1979
+ return None
1980
+ except Exception as e:
1981
+ print(e)
1982
+
1983
+ DELCHAR=db.detectGetOrSet("DELCHAR preloader func","|",setValue=False,literal=True)
1984
+ if not DELCHAR:
1985
+ DELCHAR='|'
1986
+
1987
+ def SalesFloorLocationString():
1988
+ fields=OrderedDict({
1989
+
1990
+ 'Aisle[s]':{
1991
+ 'default':'',
1992
+ 'type':'string',
1993
+ },
1994
+ 'Bay[s]/AisleDepth':{
1995
+ 'default':'',
1996
+ 'type':'string',
1997
+ },
1998
+ 'Shel[f,ves]':{
1999
+ 'default':'',
2000
+ 'type':'string',
2001
+ }
2002
+ })
2003
+ passThruText=f"""
2004
+ {Fore.orange_red_1}Valid Aisle[s]:{Fore.grey_85}
2005
+ this is the aisle on which the product resides
2006
+ if the product belongs on an end cap use the endcap here as
2007
+ well. endcaps are numbered 0+=1 from left to right of the store
2008
+ front. the same is true for aisle. if the product resides on an
2009
+ end cap, append FEC (0FEC) to signify front end cap 0, or 0REC for
2010
+ rear end cap 0.
2011
+ 0 -> on aisle 0
2012
+ 0,1 -> on aisle 0 and 1
2013
+ 0-2 -> from aisle 0 to aisle 2
2014
+
2015
+ encaps on the front side of the aisle will have an FEC Appended to its number
2016
+ The same is true for rear of the aisle(REC). if a encap range is used, the character
2017
+ will identify its side of the store. if two encaps on opposite sides of the store
2018
+ are specified, then use 2 separate ranges; one for front and one for the rear.
2019
+ 0FEC -> on front endcap 0
2020
+ 0FEC,1REC -> on front endcap 0 and on rear endcap 1.
2021
+ 0-2FEC -> from front endcap 0 to front endcap 2
2022
+ 0-2REC -> from rear endcap 0 to rear endcap 2
2023
+ 0-2FEC,0-2REC -> from front endcap 0 to front endcap 2 && from rear endcap 0 to rear endcap 2
2024
+
2025
+ if No number is provided, but a common NAME is used, use that here for this section of the location.
2026
+ {Fore.orange_red_1}Valid 'Bay[s]/AisleDepth':{Fore.grey_85}
2027
+ This is How many shelf bays deep from the front of the store
2028
+ to the back, where 0 is the first bay from the endcap at the
2029
+ front of the store and increments upwards to the rear end cap.
2030
+ Bays on the right side of the aisle will have an R Appended to its number
2031
+ The same is true for left of the aisle. if a bay range is used, the character
2032
+ will identify its side of the aisle. if two bays on opposite sides of the aisle
2033
+ are specified, then use 2 separate ranges; one for left and one for right.
2034
+ 0 -> on bay 0
2035
+ 0,1 -> on bay 0 and 1
2036
+ 0-2R -> from bay 0 to bay 2 on the right side of the aisle
2037
+ 0-2L -> from bay 0 to bay 2 on the left side of the aisle
2038
+ 0-2R,0-2L -> from bay 0 to bay 2 on the right side of the aisle && from bay 0 to bay 2 on the left side of the aisle.
2039
+
2040
+ if No number is provided, but a common NAME is used, use that here for this section of the location.
2041
+ {Fore.orange_red_1}Valid Shel[f,ves]:{Fore.grey_85}
2042
+ this is the height where the product is on the shelf
2043
+ shelves are number 0 to their highest from bottom to top
2044
+ where the very bottom shelf is 0, and the next following shelf upwards is
2045
+ 1, and so on.
2046
+ 0 -> on shelf 0
2047
+ 0,1 -> on shelf 0 and 1
2048
+ 0-2 -> from shelf 0 to shelf 2
2049
+
2050
+ if No number is provided, but a common NAME is used, use that here for this section of the location.
2051
+ {Fore.light_green}Aisle or EndCap{Fore.light_red}/{Fore.light_yellow}Depth or Bay in Aisle{Fore.light_red}/{Fore.light_steel_blue}Shelf or Location Number(s) Where Item Resides [optional]{Style.reset}
2052
+ {Fore.light_green}A completely Valid Example is Aisle 0|Household Chemicals|Kitchen Care, which is where Dawn Dish Detergent is normally located.
2053
+ {Fore.light_red}{os.get_terminal_size().columns*'/'}
2054
+ """
2055
+ fb=FormBuilder(data=fields,passThruText=passThruText)
2056
+ if fb is None:
2057
+ return
2058
+ if fb['Shel[f,ves]'] not in ['',]:
2059
+ fb['Shel[f,ves]']=f"{DELCHAR}{fb['Shel[f,ves]']}"
2060
+ locationString=f"{fb['Aisle[s]']}{DELCHAR}{fb['Bay[s]/AisleDepth']}{fb['Shel[f,ves]']}"
2061
+ return locationString
2062
+
2063
+ def BackroomLocation():
2064
+ fields=OrderedDict({
2065
+ 'moduleType':{
2066
+ 'default':'',
2067
+ 'type':'string',
2068
+ },
2069
+ 'moduleNumberRange':{
2070
+ 'default':'',
2071
+ 'type':'string',
2072
+ },
2073
+ 'caseID':{
2074
+ 'default':'',
2075
+ 'type':'string',
2076
+ },
2077
+
2078
+ })
2079
+ passThruText=f'''
2080
+ {Fore.orange_red_1}Valid ModuleTypes:{Fore.grey_85}
2081
+ this what to look on for where the product is stored
2082
+ s or S -> For Pallet/Platform [General]/Skid
2083
+ u or U -> For U-Boat/Size Wheeler
2084
+ rc or rC or Rc or RC -> for RotaCart
2085
+ sc or sC or Sc or SC -> Shopping Cart
2086
+ if a name is used, or common identifier is used, use that here in this segment of the location.
2087
+
2088
+ {Fore.orange_red_1}Valid ModuleNumberRange:{Fore.grey_85}
2089
+ This which of the what's contains said item.
2090
+ 0 -> on which 0
2091
+ 0,1 -> on which 0 and which 1
2092
+ 0-2 -> from which 0 to which 2 on the left side of the aisle
2093
+ if a name is used, or common identifier is used, use that here in this segment of the location.
2094
+ {Fore.orange_red_1}Valid caseID:{Fore.grey_85}
2095
+ This is the case where the item is stored in which is the which found on the what.
2096
+ anything that you want as long as it is unique to the module in which it is stored.
2097
+ try using the following cmds for something on the fly.
2098
+ nanoid - nanoid
2099
+ crbc - checked random barcode
2100
+ dsur - generate a datestring
2101
+ urid - generate reciept id with a log
2102
+ cruid - checked uuid
2103
+ if a name is used, or common identifier is used, use that here in this segment of the location.
2104
+ {Fore.light_red}{os.get_terminal_size().columns*'/'}
2105
+
2106
+ '''
2107
+ fb=FormBuilder(data=fields,passThruText=passThruText)
2108
+ if fb is None:
2109
+ return
2110
+ if fb['caseID'] not in ['',]:
2111
+ fb['caseID']=f"{DELCHAR}{fb['caseID']}"
2112
+ locationString=f"{fb['moduleType']}{DELCHAR}{fb['moduleNumberRange']}{' '.join(db.stre(fb['caseID'])/3)}"
2113
+ return locationString
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: radboy
3
- Version: 0.0.833
3
+ Version: 0.0.854
4
4
  Summary: A Retail Calculator for Android/Linux
5
5
  Author: Carl Joseph Hirner III
6
6
  Author-email: Carl Hirner III <k.j.hirner.wisdom@gmail.com>
@@ -5,12 +5,12 @@ radboy/Holidays.txt,sha256=y-JZPihh5iaWKxMIHNXD39yVuVmf1vMs4FdNDcg0f1Y,3114
5
5
  radboy/InventoryGlossary.txt,sha256=018-Yqca6DFb10jPdkUY-5qhkRlQN1k3rxoTaERQ-LA,91008
6
6
  radboy/RecordMyCodes.py,sha256=h30zoTqt-XLt_afDPlxMxBiKKwmKi3N-yAuldNCqXUo,41476
7
7
  radboy/Run.py,sha256=JUoCTHnzQBv7n8PB2_i93ANdAC_iW__RkAge8esCnk4,76
8
- radboy/__init__.py,sha256=nJ-VxqNIkgi9bJiHhZQrk6awE-_xqmySpJBbS70Xt3w,17
8
+ radboy/__init__.py,sha256=OZn3eVMvqzpI6xQkP_KpXsBNR-54eGL7uFArYUNWSbQ,17
9
9
  radboy/api_key,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
10
10
  radboy/case-export-2024-05-14-13-10-00.672971.xlsx,sha256=Wd592d_VLFmfUI9KKKSVjNwjV91euc1T7ATyvwvUhlg,5431
11
11
  radboy/case-export-2024-05-14-13-13-22.540614.xlsx,sha256=OnGrhmScHfGp_mVaWW-LNMsqrQgyZDpiU3wV-2s3U5Q,5556
12
12
  radboy/changelog.txt,sha256=_73e-OcHDecsK-eHEE45T84zHbUZ8Io3FzvLNwHPdoY,3714
13
- radboy/code.png,sha256=gNzkHVCy0Lg18t2eB88jceaDZe_CEHyXYkJvlGqkRno,312
13
+ radboy/code.png,sha256=m_P6IENXfBTYMF2mDkZ-hL7hlRlFE5Dwjwqrk421U7o,263
14
14
  radboy/db.csv,sha256=hpecu18LtCow5fH01queqWgqPByR628K7pLuEuLSuj4,19
15
15
  radboy/dictionary.txt,sha256=EJlEazI8RfTDX_Uzd6xnXLm9IjU5AEq6HVDwi42Y4_4,195680
16
16
  radboy/export.csv,sha256=YIU8c34enlknKMzKwzfQEN8e0mUdyW8m6O8GvgUQ9do,41015
@@ -89,14 +89,14 @@ radboy/DB/OrderedAndRxd.py,sha256=v_vrTOiTDhKqT5KErK6MOG_u4Nt7ug2MoLTHvAnm88M,19
89
89
  radboy/DB/PayDay.py,sha256=H2kPGvBCDkMOz7lbxQhYtUt_oAInpxi37Q6MFrah98I,8710
90
90
  radboy/DB/PayModels.py,sha256=hjwWxP7PL33hmfzQl5YTf0HqzaMxXJxFknPdxFJXJc8,3499
91
91
  radboy/DB/PrintLogging.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
92
- radboy/DB/Prompt.py,sha256=3VVILclitG5HIDTIEXH8Jb9yJ68mQzR1Aa80ZlfHxms,195464
92
+ radboy/DB/Prompt.py,sha256=f5C7I0LeCkSxBcPfwT44nqyzGekhOaV2HLQJGDqyt6I,201050
93
93
  radboy/DB/RandomStringUtil.py,sha256=eZCpR907WStgfbk4Evcghjv9hOkUDXH-iMXIq0-kXq8,24386
94
94
  radboy/DB/ResetTools.py,sha256=RbI-Ua7UlsN0S9qLqtEkTWvzyTZ6R-hHR3CW4NHlUPE,6660
95
95
  radboy/DB/SMLabelImporter.py,sha256=eUoBDxVUUEKGL2g_PwkASM67ZB7FmXtSnn4bCagskhY,4013
96
96
  radboy/DB/__init__.py,sha256=JiigA9B7GalP7YuRdcwyGDu5PDSBahoi0lLjtScxlN8,49
97
97
  radboy/DB/blankDataFile.py,sha256=YX_05Usi71UpDkZN9UTMYwUipbTndTAtEgqzBEga0kE,9285
98
98
  radboy/DB/config.py,sha256=bvu43dUl1_yO3Zq3gsLuenGUgJSiS3S9Cs6ppFEvZbg,239
99
- radboy/DB/db.py,sha256=cDzPO1fcdfTHmTIphOTkJLw9jDHzeFl6UyF1H3qMJIM,269276
99
+ radboy/DB/db.py,sha256=Nt5J70GUV3LsYXtpEp1SJJcVWUVLRyyd6-eQAa8u2Ao,269365
100
100
  radboy/DB/glossary_db.py,sha256=1_qxeEpjjEtpWB_eDjsgJisimLv7OBm75MuqM-Lt6zg,28218
101
101
  radboy/DB/jobnotes.txt,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
102
102
  radboy/DB/lsToday.py,sha256=Pevus6GBHLM2xudBEx8u36Q-jYvatOI-y5o72BmFnzA,9435
@@ -120,7 +120,7 @@ radboy/DB/__pycache__/FormBuilder.cpython-312.pyc,sha256=p1o-5SMRL8OXP_XQ5liUpf-
120
120
  radboy/DB/__pycache__/PrintLogging.cpython-312.pyc,sha256=pIAFqTi6OiQQORSc-oMH1zAbsdH7sY1TifxrN_QOvnU,148
121
121
  radboy/DB/__pycache__/Prompt.cpython-311.pyc,sha256=P2uPRpeqfLFtxieZ0JHBG3X_HZzWUCsFSLb_fpRqky0,6407
122
122
  radboy/DB/__pycache__/Prompt.cpython-312.pyc,sha256=6CcQ1gE2hcz3cKPjo4f6d7xNM2PTDnl8NzQG0Pme5BE,142886
123
- radboy/DB/__pycache__/Prompt.cpython-313.pyc,sha256=YKmkyZ3JcuBax2UcNQgr4y-8YL50ZtIA5yw6nyc1IuA,277313
123
+ radboy/DB/__pycache__/Prompt.cpython-313.pyc,sha256=fp9akh_NtWl9Y3fMcWEJv3pTOcUFRq73gPjTATljeM0,288440
124
124
  radboy/DB/__pycache__/RandomStringUtil.cpython-312.pyc,sha256=TrbEY89MuLmNlvoo5d8vOE6Dyshh5_EMlTZvk8MDVN4,48597
125
125
  radboy/DB/__pycache__/RandomStringUtil.cpython-313.pyc,sha256=MCcgVwV2Y-9rAY2FVaJZCKcou3HDX70EZudoiCigT0o,49217
126
126
  radboy/DB/__pycache__/ResetTools.cpython-311.pyc,sha256=4Vyc57iAAF0yRPjjglnVKovnTn8OoFIi6Zok3Wpj_YM,9292
@@ -138,7 +138,7 @@ radboy/DB/__pycache__/config.cpython-312.pyc,sha256=Qo7E6MHrF6yqvKgepNFyCoekZXiv
138
138
  radboy/DB/__pycache__/config.cpython-313.pyc,sha256=_8wCIg_3jhyJjxnExD2Sm6aY-uZTw036p7Ki5znL7dc,376
139
139
  radboy/DB/__pycache__/db.cpython-311.pyc,sha256=rNgigyBd0D-cg1JxKAS8t0B_k0IEJivgVlRaZE10Xis,210105
140
140
  radboy/DB/__pycache__/db.cpython-312.pyc,sha256=ANDJPC0RoavbmSKFxG15vC7B4rEGyVt7xRJt7XGY3OA,334609
141
- radboy/DB/__pycache__/db.cpython-313.pyc,sha256=n1ZN0c9T_q7lzJAxMNZ8cUjHxEzMe7xZ-ueRvgeWGQU,421839
141
+ radboy/DB/__pycache__/db.cpython-313.pyc,sha256=_XliixS8MkybVKu-N5x9U3w7-5vO1_KSM3NUf7vVTTM,422112
142
142
  radboy/DB/__pycache__/glossary_db.cpython-312.pyc,sha256=8UL-29cKqtKovx0BANm6kzKKteef1BW_2qF3wumzst4,36023
143
143
  radboy/DB/__pycache__/glossary_db.cpython-313.pyc,sha256=Ke9bkvllGv5CK0JdT9DRvQ3MOdrXxoYv7TVLNkqLux0,36582
144
144
  radboy/DB/__pycache__/masterLookup.cpython-312.pyc,sha256=bQiOkmMwwHgcO18tYSWGQ-YUff4GQlKVhBMp1GoWAqY,6324
@@ -155,7 +155,7 @@ radboy/DayLog/BhTrSa/__init__.py,sha256=q6xDsXAiWpQR2QWILKZKf--D3apR_KOE1CRbZaP7
155
155
  radboy/DayLog/BhTrSa/bhtrsaa.py,sha256=3ECYU_2yMNS_zsN0ZD6BbiIwbWcJ9mokUwOt_hkTAYs,18233
156
156
  radboy/DayLog/__pycache__/DayLogger.cpython-311.pyc,sha256=TmRnRZHp5tMTokSEB8hWTxnasi-iJdh6TmYcb_nXGoY,29557
157
157
  radboy/DayLog/__pycache__/DayLogger.cpython-312.pyc,sha256=bfDCQZrIhgQYzoUle7roicRE_bhGPYZtIbCRIiDrsxU,68240
158
- radboy/DayLog/__pycache__/DayLogger.cpython-313.pyc,sha256=B3BjtHZqJfsgoj4B28RMmbq1FlTfLF6zbX41qiiI3Xc,156176
158
+ radboy/DayLog/__pycache__/DayLogger.cpython-313.pyc,sha256=xeO9OXxmHL31r01oShxv323SGMepsWmPrDh6bJG3X4o,156214
159
159
  radboy/DayLog/__pycache__/__init__.cpython-311.pyc,sha256=Z5Y4DdVF77LZf6-Of92MDGFdi-IXik1ASQd4AdLNNfQ,231
160
160
  radboy/DayLog/__pycache__/__init__.cpython-312.pyc,sha256=lP_GHzSPt5JTrT1jLWiRMFGPmSdJYBn4eRV__OxgJ6s,269
161
161
  radboy/DayLog/__pycache__/__init__.cpython-313.pyc,sha256=UQw5v4r7yismC9qcqP0dEme6h-lawbOA5pXYpkqUwFk,148
@@ -311,11 +311,11 @@ radboy/PunchCard/__pycache__/PunchCard.cpython-313.pyc,sha256=N8L4cP6iQldfDcYZNx
311
311
  radboy/PunchCard/__pycache__/__init__.cpython-311.pyc,sha256=Off5ltCdLUEhm2xHBufyQYZn3cmJ0FHMb5ZiZpzi6cI,234
312
312
  radboy/PunchCard/__pycache__/__init__.cpython-312.pyc,sha256=Y6qJWX7nupibrd15D5ZkcLV2B9QucwyIu6Mz3YFv-Bw,272
313
313
  radboy/PunchCard/__pycache__/__init__.cpython-313.pyc,sha256=aa7buQA_iDOOynayLa8DRx1TYsKRpB9VkhwoL1n8LDU,151
314
- radboy/RNE/RNE.py,sha256=CVvdGbmfGHwhafGSxtSBq2hgRCMqVj0tmurS0xwwQao,39014
314
+ radboy/RNE/RNE.py,sha256=0rZAjUwzUAYomHzeyQ9XOgu7RzEweigCvLz1IepXrUc,39217
315
315
  radboy/RNE/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
316
316
  radboy/RNE/dateAhead.py,sha256=g5pp84vteEkYlxRi5rgo6p2Z6PyoBmozljlnWx8twMs,1594
317
317
  radboy/RNE/__pycache__/RNE.cpython-312.pyc,sha256=TCmgh08Ac9MDZgJZwb-_cpCATcLu04wp_HPNtXBrwFw,54377
318
- radboy/RNE/__pycache__/RNE.cpython-313.pyc,sha256=LImIKDDPVB_WvYYSnGIgVg3r54BwHK4tea4PVnHUAI4,75540
318
+ radboy/RNE/__pycache__/RNE.cpython-313.pyc,sha256=flCjfhUPQDYMTUApXjlMwJ_aG9gf9qA339fNQsjToYw,75732
319
319
  radboy/RNE/__pycache__/__init__.cpython-312.pyc,sha256=uV2pHPbmeCebUp_7Fx1oOhe0ccQGsOtaCzVRFmj6IAg,266
320
320
  radboy/RNE/__pycache__/__init__.cpython-313.pyc,sha256=7J11knluwp7WjdVRcd4526_Y1LJo_nH4Kg3rNKIc77U,145
321
321
  radboy/Repack/Repack.py,sha256=JmGpsVWUIW71dwARwcuG_L2PP6puYbwRjVy1NJ9tYH8,42593
@@ -356,17 +356,17 @@ radboy/SystemSettings/__pycache__/SystemSettings.cpython-313.pyc,sha256=ddGbkpJe
356
356
  radboy/SystemSettings/__pycache__/__init__.cpython-312.pyc,sha256=aIzp4Po0t8EhSAE8ytO-tJlNuKnEzAWPi1fzEIoGesI,277
357
357
  radboy/SystemSettings/__pycache__/__init__.cpython-313.pyc,sha256=QFDuoidxMWsGVLsy5lN-rDs6TP8nKJ4yyCyiamNOhwo,156
358
358
  radboy/TasksMode/ReFormula.py,sha256=REDRJYub-OEOE6g14oRQOLOQwv8pHqVJy4NQk3CCM90,2255
359
- radboy/TasksMode/SetEntryNEU.py,sha256=d-Aya8yxdVmcMNDcp0UBMQQm4IAbJv6vhYKeh9r0Kmg,20694
360
- radboy/TasksMode/Tasks.py,sha256=FOvA8qckGVvnRj-jsdGRu9Lih_hjo8J7t58SWGUPigc,381147
359
+ radboy/TasksMode/SetEntryNEU.py,sha256=dxyYOKnGOe6eCq0wz1ir8-kqte3ajZhoNj1BOcElErI,21147
360
+ radboy/TasksMode/Tasks.py,sha256=X2kdmL4_2kyQ6kaBo7Q5k4oppIX3yjUtVOF_nm7IqxI,386979
361
361
  radboy/TasksMode/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
362
362
  radboy/TasksMode/__pycache__/ReFormula.cpython-311.pyc,sha256=QEG3PwVw-8HTd_Mf9XbVcxU56F1fC9yBqWXYPLC39DU,4865
363
363
  radboy/TasksMode/__pycache__/ReFormula.cpython-312.pyc,sha256=aX7BWm2PPjCTnxsbGUitR-2h9hq4AjaBiHMrUXvIl0Y,3967
364
364
  radboy/TasksMode/__pycache__/ReFormula.cpython-313.pyc,sha256=BfNrg6vlQn5f2asq3gT7JVYC0sOLmYqQyuBPTGJXPNk,3901
365
365
  radboy/TasksMode/__pycache__/SetEntryNEU.cpython-312.pyc,sha256=pCdFj61aPKkHL6SvZZ4jUfWJulvDbKue4HGFTIeteOU,17671
366
- radboy/TasksMode/__pycache__/SetEntryNEU.cpython-313.pyc,sha256=aXhwkDb2JQXRyJpxYBScWk6Wfsze9uM7vdx9lo-u57Q,24632
366
+ radboy/TasksMode/__pycache__/SetEntryNEU.cpython-313.pyc,sha256=ukD50hAe2WLPoFM4LT9mwx8xsR5ZnpXEdZLQkHXZIfs,25197
367
367
  radboy/TasksMode/__pycache__/Tasks.cpython-311.pyc,sha256=6QOTJnLiXSKdF81hkhy3vyrz49PPhS20s5_0X52g3Hw,131120
368
368
  radboy/TasksMode/__pycache__/Tasks.cpython-312.pyc,sha256=hyJwdaYaaRLdcrNxgg36diJ5iijX5_3I0UAORsj-6LU,310295
369
- radboy/TasksMode/__pycache__/Tasks.cpython-313.pyc,sha256=lfrCcMdEPo72q397gI3zhaHwy0tZVx3O971xB4JfzKI,454790
369
+ radboy/TasksMode/__pycache__/Tasks.cpython-313.pyc,sha256=a64uW5rJJkIEUsJQp89zd2Fpw-qbwlByLZmX9kswnBE,459907
370
370
  radboy/TasksMode/__pycache__/__init__.cpython-311.pyc,sha256=PKV1JbihEacm639b53bZozRQvcllSkjGP3q8STVMxF4,234
371
371
  radboy/TasksMode/__pycache__/__init__.cpython-312.pyc,sha256=ERgnEvRMiGSecWp1BpNzLdSq_SdKw7GvFWUvUM7bLVw,272
372
372
  radboy/TasksMode/__pycache__/__init__.cpython-313.pyc,sha256=lvsTxukyvGKB3C0rdF9dQi_bvVh6ceDVINfwcuIsd0s,151
@@ -378,12 +378,12 @@ radboy/TouchStampC/__pycache__/TouchStampC.cpython-313.pyc,sha256=6A1Z56mlsBBZi4
378
378
  radboy/TouchStampC/__pycache__/__init__.cpython-311.pyc,sha256=0Rn25Y_gKIKFC7fRVMToQ99ozp8rqnK3HkTajb4skdo,236
379
379
  radboy/TouchStampC/__pycache__/__init__.cpython-312.pyc,sha256=Qa5Iy6Fp7_w5wPhQCbj6FFvfMttQoNd5j6DTqYXa_GQ,274
380
380
  radboy/TouchStampC/__pycache__/__init__.cpython-313.pyc,sha256=kA-p_LdocXJQHfYfDE0DQZ3fgzbfoL90Kr0soLsff_w,153
381
- radboy/Unified/BACKUP.py,sha256=ElYwHFuIdIBM2eLOvN9MKNLlaFS72xKngqJnoIX1oDY,19674
381
+ radboy/Unified/BACKUP.py,sha256=uB7yXUYcQF4gQFYC5g-hj7VvFol-6pSHGNvTkvcbTHw,20056
382
382
  radboy/Unified/Unified.py,sha256=l6SLbwnAg6XP_eIhgzj4a3rI54kTDv8kRt_z1A9D_vM,47147
383
383
  radboy/Unified/Unified2.py,sha256=TnJQ5Ir28cLG449o8mDe8Ya1Zx4WaRhuoHfEIrCbJME,42257
384
384
  radboy/Unified/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
385
- radboy/Unified/bareCA.py,sha256=_WN3mQcuOuaZpd1Fm2aasisb9lCJWY2zbYqvCA0MNbI,7595
386
- radboy/Unified/clearalll.py,sha256=KjXE7rWb4h6wwSmHxm32NMF9vW5-Om43vNqWOnZ9xsc,4042
385
+ radboy/Unified/bareCA.py,sha256=nV3vXH0K9Y8iLNUwl-dFqOxHGaqpKkEzgTuKYvhCOP0,7739
386
+ radboy/Unified/clearalll.py,sha256=DVJnhkL2sc0mQGxpHlLm0_LThF1Q0uhslNQXleAujqg,4064
387
387
  radboy/Unified/__pycache__/Unified.cpython-311.pyc,sha256=ZtvZDV9cVMV_r_Cuj6LR4m27CGUnZy0l9zUTILSnMRg,65018
388
388
  radboy/Unified/__pycache__/Unified.cpython-312.pyc,sha256=BT3bLl4LQUs7m3H44WVjg6BsHfU9xnWNwpytZSA2smI,78625
389
389
  radboy/Unified/__pycache__/Unified.cpython-313.pyc,sha256=zsjNgW6Z1KRZmuhfBk_42fJxQobSFpiwg6ianEJ3qE0,63057
@@ -391,9 +391,9 @@ radboy/Unified/__pycache__/__init__.cpython-311.pyc,sha256=2OjdGThHMNZ2yMrbdlwiK
391
391
  radboy/Unified/__pycache__/__init__.cpython-312.pyc,sha256=5aXXASuWsXCly7t_gqJ6cVbdAeTo4Wom8989FszH4Xw,270
392
392
  radboy/Unified/__pycache__/__init__.cpython-313.pyc,sha256=h03zVuB4hfY_ko4nkuSS-SIkjHOGTlFM9bDpMdQPwg4,149
393
393
  radboy/Unified/__pycache__/bareCA.cpython-312.pyc,sha256=1zLSCPMarDCdguIxDCjlvTf2SQXi9Y17oznnEbNbQlg,2839
394
- radboy/Unified/__pycache__/bareCA.cpython-313.pyc,sha256=UEBuma_NesGx3tCMVa8_Njm-BM6KYpZJAeflF24ZGXs,8402
394
+ radboy/Unified/__pycache__/bareCA.cpython-313.pyc,sha256=sp1JYvJBFN8PWohKtJGTUCA1WqKBrH9OOogZBKtyqKQ,8452
395
395
  radboy/Unified/__pycache__/clearalll.cpython-312.pyc,sha256=GDkncqa0aJ_55M5ElOfcl-LLiKS6ZXgY779ENHLYS-E,5042
396
- radboy/Unified/__pycache__/clearalll.cpython-313.pyc,sha256=cIw4t3l14gPTYuz_BX7jr-A22dg9I5-mv93k1gqf5Uw,7177
396
+ radboy/Unified/__pycache__/clearalll.cpython-313.pyc,sha256=2Nn2wuvarNtyU0Tx1AaWVNWpGdQJtbft90nx-lzbwfQ,7198
397
397
  radboy/UpdatesAndImports/UpdatesAndImports.py,sha256=KXmiLaB72hMs2Iqkek9fMmme7xgNSXgpcVkKBYVXD00,1687
398
398
  radboy/UpdatesAndImports/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
399
399
  radboy/UpdatesAndImports/__pycache__/UpdatesAndImports.cpython-311.pyc,sha256=n5mnxgmq0egDH-Evf6h0cRF6mmP9N0pAOsS2NkyKA1o,3351
@@ -414,7 +414,7 @@ radboy/__pycache__/Run.cpython-311.pyc,sha256=G_UEfMtkLRjR6ZpGA_BJzGenuaCcP469Y9
414
414
  radboy/__pycache__/Run.cpython-312.pyc,sha256=v4xolc3mHyla991XhpYBUbBHYT0bnJ1gE-lkFoQ4GFA,241
415
415
  radboy/__pycache__/__init__.cpython-311.pyc,sha256=R-DVbUioMOW-Fnaq7FpT5F1a5p0q3b_RW-HpLRArCAY,242
416
416
  radboy/__pycache__/__init__.cpython-312.pyc,sha256=FsFzLXOlTK8_7ixoPZzakkR8Wibt-DvXLFh-oG2QlPw,164
417
- radboy/__pycache__/__init__.cpython-313.pyc,sha256=MiRi6BBiav1GcdPqrb78eLhIbvvTK_PW_tZPenP6pMU,165
417
+ radboy/__pycache__/__init__.cpython-313.pyc,sha256=SFLAtBliP9y3nz0Jc5MEMLEXcpeg-e2dOH1rKTJn_2A,165
418
418
  radboy/__pycache__/__init__.cpython-39.pyc,sha256=D48T6x6FUeKPfubo0sdS_ZUut3FmBvPMP7qT6rYBZzU,275
419
419
  radboy/__pycache__/possibleCode.cpython-311.pyc,sha256=zFiHyzqD8gUnIWu4vtyMYIBposiRQqaRXfcT_fOl4rU,20882
420
420
  radboy/__pycache__/possibleCode.cpython-312.pyc,sha256=tk_CO-AcsO3YZj5j6vEsw3g37UmEzWc5YgeWEoJEUg4,27922
@@ -424,8 +424,8 @@ radboy/__pycache__/t.cpython-311.pyc,sha256=bVszNkmfiyoNLd0WUc8aBJc2geGseW4O28cq
424
424
  radboy/__pycache__/te.cpython-311.pyc,sha256=vI8eNUE5VVrfCQvnrJ7WuWpoKcLz-vVK3ifdUZ4UNhk,592
425
425
  radboy/__pycache__/x.cpython-311.pyc,sha256=3jIvWoO5y5WqrL_hRmXNK8O0vO7DwJ4gufjm2b0V7VI,1963
426
426
  radboy/preloader/__init__.py,sha256=lrGR0JF0dkDM8N9ORGUKH_MucUFx1-PI38YsvqS-wgA,926
427
- radboy/preloader/preloader.py,sha256=137c5pW-NRhskZeNsQYV6KAbINkmysrAk7OPKbEnKTo,8910
428
- radboy/preloader/preloader_func.py,sha256=zcjgsVH9CKQzZ6eoQuJifF6ZTL4hQI3cRTs0-d0EhiE,63530
427
+ radboy/preloader/preloader.py,sha256=wEiImcxM1Rrzt-SwMwNxQxG7WCgzl26M-Bi76K4kyL4,9705
428
+ radboy/preloader/preloader_func.py,sha256=bE_3B7JDts3porBnhEqwx6pIGSKk7tkvN6HaKAUF-HY,76174
429
429
  radboy/setCode/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
430
430
  radboy/setCode/setCode.py,sha256=8UOf4okbx-Zane99odeoLAS_lfIt8pIaFomN7EtnnVA,5202
431
431
  radboy/setCode/__pycache__/__init__.cpython-311.pyc,sha256=cJuP5rve6Wn7ZO789tixyOlyrHZQWsBxDn9oZGoG5WE,232
@@ -442,7 +442,7 @@ radboy/tkGui/Images/__pycache__/__init__.cpython-311.pyc,sha256=tXBYpqbOlZ24B1BI
442
442
  radboy/tkGui/__pycache__/BeginnersLuck.cpython-311.pyc,sha256=xLQOnV1wuqHGaub16mPX0dDMGU9ryCeLtNz5e517_GE,3004
443
443
  radboy/tkGui/__pycache__/Review.cpython-311.pyc,sha256=wKq24iM6Xe2OampgZ7-8U6Nvmgs2y-qWOrGwtWhc75k,4047
444
444
  radboy/tkGui/__pycache__/__init__.cpython-311.pyc,sha256=BX7DBn5qbvKTvlrKOP5gzTBPBTeTgSMjBW6EMl7N8e0,230
445
- radboy-0.0.833.dist-info/METADATA,sha256=dmqI5NAqP4k9UaaaKW3pHnj08MSl_ATZdvHhXSGiPrg,1920
446
- radboy-0.0.833.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
447
- radboy-0.0.833.dist-info/top_level.txt,sha256=mlM0RWMUxGo1YHnlLmYrHOgGdK4XNRpr7nMFD5lR56c,7
448
- radboy-0.0.833.dist-info/RECORD,,
445
+ radboy-0.0.854.dist-info/METADATA,sha256=FknTqzednxKO0K1y43bIYcmJniHo0uSDvSHkPAYcp0Y,1920
446
+ radboy-0.0.854.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
447
+ radboy-0.0.854.dist-info/top_level.txt,sha256=mlM0RWMUxGo1YHnlLmYrHOgGdK4XNRpr7nMFD5lR56c,7
448
+ radboy-0.0.854.dist-info/RECORD,,