Compare commits
101 Commits
20220606-1
...
fac7a7a4b2
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
fac7a7a4b2 | ||
|
|
756eeab00c | ||
|
|
94ca5534e5 | ||
|
|
d751edd248 | ||
|
|
516ab4ac3f | ||
|
|
32c8a5ca3f | ||
|
|
f2422762d2 | ||
|
|
e8b52bcd17 | ||
|
|
90bb7e53b0 | ||
|
|
56c23ae53c | ||
|
|
5998bf48cb | ||
|
|
5311208184 | ||
|
|
86a2b99f39 | ||
|
|
eb0e4b4429 | ||
|
|
4387a1d00b | ||
|
|
c722af1091 | ||
|
|
92b3a76733 | ||
|
|
5adbc77555 | ||
|
|
1146ff01c7 | ||
|
|
e4c075f6ef | ||
|
|
f05a56bc5a | ||
|
|
b19340e149 | ||
|
|
d313ddefac | ||
|
|
f3d94d330c | ||
|
|
c198410cd3 | ||
|
|
48353c6f98 | ||
|
|
a94b2cc0d6 | ||
|
|
9ba8998c32 | ||
|
|
513556f0a3 | ||
|
|
81a9717716 | ||
|
|
3ff3416b39 | ||
|
|
e430117d40 | ||
|
|
5060490ac4 | ||
|
|
d4e5ff6f1b | ||
|
|
894a8bbfbb | ||
|
|
4d2e2f2351 | ||
|
|
6f09de76ab | ||
|
|
eee31f3a1d | ||
|
|
bf1533ccdb | ||
|
|
36ce8a2488 | ||
|
|
891a29e39b | ||
|
|
2f9d8c1da8 | ||
|
|
191821d81d | ||
|
|
99a89585b5 | ||
|
|
e60ed4b5fa | ||
|
|
4c75a6167b | ||
|
|
842ae5fb69 | ||
|
|
355d17810f | ||
|
|
510587d3eb | ||
|
|
ff22572e56 | ||
|
|
54873a2715 | ||
|
|
1ce77f4e08 | ||
|
|
7be1f15c63 | ||
|
|
cdc7205ab7 | ||
|
|
5b0f7a1119 | ||
|
|
5c7f9c1f4e | ||
|
|
975595b592 | ||
|
|
1907632dca | ||
|
|
6d9b991c04 | ||
|
|
e35a24030d | ||
|
|
1a7d649651 | ||
|
|
0d499cd0f6 | ||
|
|
94c8c64ced | ||
|
|
79f6c3df6d | ||
|
|
6a28aeaa16 | ||
|
|
42f32873ea | ||
|
|
e4137d4780 | ||
|
|
b10b14c420 | ||
|
|
0a1cbd31b8 | ||
|
|
dc7ace0446 | ||
|
|
6a46da5a89 | ||
|
|
e8d1bf7696 | ||
|
|
d918e5b7aa | ||
|
|
d2c132bc24 | ||
|
|
934ed40937 | ||
|
|
ff789f409c | ||
|
|
c8e1d42af0 | ||
|
|
b6ba37b3c9 | ||
|
|
714f6101ff | ||
|
|
075ab7cee7 | ||
|
|
16cb31d859 | ||
|
|
b3c4ab9e0b | ||
|
|
bb57b3edff | ||
|
|
ab248478c0 | ||
|
|
2a1fcd7437 | ||
| 49297d23ef | |||
|
|
8995d412f9 | ||
|
|
b8bca94f65 | ||
|
|
e3c4ee9d3e | ||
|
|
80fa01633e | ||
|
|
d8fea135a9 | ||
|
|
ccb2b73d51 | ||
|
|
fd776244b9 | ||
|
|
393e9c844d | ||
|
|
44197d446b | ||
|
|
2c1b77b65f | ||
|
|
cd3f8d3f50 | ||
|
|
37486aede9 | ||
|
|
6af89ff67a | ||
|
|
852acc1749 | ||
|
|
fb0eebff07 |
@@ -1,10 +1,14 @@
|
||||
from version import *
|
||||
import urllib.request
|
||||
import urllib.error
|
||||
import ssl
|
||||
import io
|
||||
|
||||
class auto_updater:
|
||||
dl_version = 0
|
||||
temp_dir = ""
|
||||
|
||||
def clean(str):
|
||||
def clean(self, str):
|
||||
str = str.replace('/','')
|
||||
str = str.replace(':', '')
|
||||
str = str.replace('{', '')
|
||||
@@ -12,19 +16,30 @@ def clean(str):
|
||||
str = str.replace("\\", '')
|
||||
return str
|
||||
|
||||
def new_update_available():
|
||||
def new_update_available(self):
|
||||
ret = False
|
||||
ctx = ssl.create_default_context()
|
||||
ctx.check_hostname = False
|
||||
ctx.verify_mode = ssl.CERT_NONE
|
||||
|
||||
data = urllib.request.urlopen("https://gitea.prod.resk-u.ch/CLERC/AttribWinbiz/raw/branch/master/dl_version", context=ctx)
|
||||
dl_version = str(data.read()).replace('b', '').replace("'", "")
|
||||
self.dl_version = str(data.read()).replace('b', '').replace("'", "").replace("\n","").replace('n',"")
|
||||
|
||||
ssl._create_default_https_context = ssl._create_unverified_context
|
||||
if dl_version != VERSION:
|
||||
print(f"Version différente trouvée {dl_version} téléchargement en cours")
|
||||
urllib.request.urlretrieve(url=f"https://gitea.prod.resk-u.ch/CLERC/AttribWinbiz/releases/download/{clean(dl_version)}/Clercattrib2Biz_setup.exe", filename="update.exe")
|
||||
if self.dl_version != VERSION:
|
||||
print(f"Version différente trouvée {self.dl_version} téléchargement en cours => {self.temp_dir}clerc_update.exe")
|
||||
try:
|
||||
url = f"https://gitea.prod.resk-u.ch/CLERC/AttribWinbiz/releases/download/{self.clean(self.dl_version)}/Clercattrib2Biz_setup.exe"
|
||||
urllib.request.urlretrieve(url=url, filename=f"{self.temp_dir}clerc_update.exe")
|
||||
except urllib.error.URLError as e:
|
||||
print(f"ERREUR de téléchargement mise à jour : {e.reason} \n {url}")
|
||||
return "ERROR"
|
||||
except urllib.error.HTTPError as e:
|
||||
print(f"ERREUR HTTP lors du téléchargement : {e.code} {e.reason} \n {url}")
|
||||
return "ERROR"
|
||||
except Exception as e:
|
||||
print(f"Erreur inattendue : {e} \n {url}")
|
||||
return "ERROR"
|
||||
ret = True
|
||||
return ret
|
||||
|
||||
|
||||
222
cl_attriblink.py
Normal file
222
cl_attriblink.py
Normal file
@@ -0,0 +1,222 @@
|
||||
|
||||
class cl_AttribLink():
|
||||
def __init__(self):
|
||||
self.invoice_ID = None
|
||||
self.FIP = None
|
||||
self.comments = None
|
||||
self.km = None
|
||||
self.invoice_date = None
|
||||
|
||||
|
||||
self.debtor_code = None
|
||||
self.debtor_name = None
|
||||
self.debtor_lastname = None
|
||||
self.debtor_firstname = None
|
||||
self.debtor_addr_complement = None
|
||||
self.debtor_street = None
|
||||
self.debtor_street_number = None
|
||||
self.debtor_postal_code = None
|
||||
self.debtor_city = None
|
||||
self.debtor_country = None
|
||||
self.debtor_gender = None
|
||||
|
||||
self.patient_AVS = None
|
||||
self.patient_category = None
|
||||
self.patient_birthdate = None
|
||||
self.patient_lastname = None
|
||||
self.patient_firstname = None
|
||||
self.patient_addr_complement = None
|
||||
self.patient_addr_2 = None
|
||||
self.patient_street = None
|
||||
self.patient_street_number = None
|
||||
self.patient_postal_code = None
|
||||
self.patient_city = None
|
||||
self.patient_country = None
|
||||
self.patient_gender = None
|
||||
self.patient_insurance_name = None
|
||||
|
||||
self.intervention_type = None
|
||||
self.intervention_base = None
|
||||
self.intervention_team = None
|
||||
self.intervention_start_time = None
|
||||
self.intervention_end_time = None
|
||||
|
||||
#Intervention DEST
|
||||
self.intervention_dest_name = None
|
||||
self.intervention_dest_street = None
|
||||
self.intervention_dest_street_number = None
|
||||
self.intervention_dest_postal_code = None
|
||||
self.intervention_dest_city = None
|
||||
|
||||
#Intervention Site
|
||||
self.intervention_site_name = None
|
||||
self.intervention_site_street = None
|
||||
self.intervention_site_street_number = None
|
||||
self.intervention_site_postal_code = None
|
||||
self.intervention_site_city = None
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
self.src_key_invoice = {
|
||||
"id": ["id"],
|
||||
"total_price": ["total_price"],
|
||||
"date": ["date"],
|
||||
"comments": ["comments"],
|
||||
|
||||
}
|
||||
|
||||
self.src_key_debtor = {
|
||||
"code": ["code"],
|
||||
"name": ["name"],
|
||||
"lastname": ["lastname"],
|
||||
"firstname": ["firstname"],
|
||||
"addr_complement": ["complement"],
|
||||
"street": ["street"],
|
||||
"addr_2": ["addr_2"],
|
||||
"street_number": ["street_number"],
|
||||
"postal_code": ["postal_code"],
|
||||
"city": ["city"],
|
||||
"country_name": ["country","country_name"],
|
||||
"gender_name": ["gender","gender_name"],
|
||||
}
|
||||
self.src_key_patient = {
|
||||
"fip": ["fip_number"],
|
||||
"category_name": ["category", "category_name"],
|
||||
"birthdate": ["birthdate"],
|
||||
"AVS": ["insurance_policy_number"],
|
||||
"lastname": ["lastname"],
|
||||
"firstname": ["firstname"],
|
||||
"addr_complement": ["complement"],
|
||||
"street": ["street"],
|
||||
"addr_2": ["addr_2"],
|
||||
"street_number": ["street_number"],
|
||||
"postal_code": ["postal_code"],
|
||||
"city": ["city"],
|
||||
"country_name": ["country","country_name"],
|
||||
"gender_name": ["gender","gender_name"],
|
||||
"insurance_name": ["insurance","insurance_name"],
|
||||
}
|
||||
self.src_key_article = {
|
||||
"price": ["price"],
|
||||
"code": ["code"],
|
||||
"line_1": ["line_1"],
|
||||
"line_2": ["line_2"],
|
||||
"quantity": ["quantity"],
|
||||
"unit_price": ["unit_price"],
|
||||
"unit": ["unit", "unit_name"],
|
||||
"price": ["price"],
|
||||
}
|
||||
|
||||
self.src_key_intervention = {
|
||||
"date": ["date"],
|
||||
"type": ["type"],
|
||||
"kilometers": ["kilometers"],
|
||||
"start_time": ["start_time"],
|
||||
"end_time": ["end_time"],
|
||||
"base_name": ["base", "base_name"],
|
||||
"team_name": ["team", "team_name"],
|
||||
"destination_name": ["destination", "destination_name"],
|
||||
"destination_street": ["destination", "destination_street"],
|
||||
"destination_street_number": ["destination_street_number"],
|
||||
"destination_city": ["destination_city"],
|
||||
"destination_postal_code": ["destination_postal_code"],
|
||||
"site_name": ["site", "site_name"],
|
||||
"site_street": ["site", "site_street"],
|
||||
"site_street_number": ["site_street_number"],
|
||||
"site_city": ["site_city"],
|
||||
"site_postal_code": ["site_postal_code"],
|
||||
}
|
||||
|
||||
def parse_data(self, data):
|
||||
self.invoice_ID = self.get_value_from_attrib(data=data, obj="data", key="id")
|
||||
self.comments = self.get_value_from_attrib(data=data, obj="data", key="comments")
|
||||
self.invoice_date = self.get_value_from_attrib(data=data, obj="data", key="date")
|
||||
|
||||
|
||||
self.debtor_code = self.get_value_from_attrib(data=data, obj="debtor", key="code")
|
||||
self.debtor_name = self.get_value_from_attrib(data=data, obj="debtor", key="name")
|
||||
self.debtor_lastname = self.get_value_from_attrib(data=data,obj="debtor",key="lastname")
|
||||
self.debtor_firstname = self.get_value_from_attrib(data=data,obj="debtor",key="firstname")
|
||||
self.debtor_addr_complement = self.get_value_from_attrib(data=data,obj="debtor",key="addr_complement")
|
||||
self.debtor_street = self.get_value_from_attrib(data=data,obj="debtor",key="street")
|
||||
self.debtor_street_number = self.get_value_from_attrib(data=data,obj="debtor",key="street_number")
|
||||
self.debtor_postal_code = self.get_value_from_attrib(data=data,obj="debtor",key="postal_code")
|
||||
self.debtor_city = self.get_value_from_attrib(data=data,obj="debtor",key="city")
|
||||
self.debtor_gender = self.get_value_from_attrib(data=data,obj="debtor",key="gender_name")
|
||||
self.debtor_country = self.get_value_from_attrib(data=data,obj="debtor",key="country_name")
|
||||
|
||||
self.FIP = self.get_value_from_attrib(data=data, obj="patient", key="fip")
|
||||
self.patient_category = self.get_value_from_attrib(data=data, obj="patient", key="category_name")
|
||||
self.patient_birthdate = self.get_value_from_attrib(data=data, obj="patient", key="birthdate")
|
||||
self.patient_lastname = self.get_value_from_attrib(data=data, obj="patient", key="lastname")
|
||||
self.patient_addr_2 = self.get_value_from_attrib(data=data, obj="patient", key="addr_2")
|
||||
self.patient_firstname = self.get_value_from_attrib(data=data, obj="patient", key="firstname")
|
||||
self.patient_addr_complement = self.get_value_from_attrib(data=data, obj="patient", key="addr_complement")
|
||||
self.patient_street = self.get_value_from_attrib(data=data,obj="patient",key="street")
|
||||
self.patient_street_number = self.get_value_from_attrib(data=data,obj="patient",key="street_number")
|
||||
self.patient_postal_code = self.get_value_from_attrib(data=data,obj="patient",key="postal_code")
|
||||
self.patient_city = self.get_value_from_attrib(data=data,obj="patient",key="city")
|
||||
self.patient_gender = self.get_value_from_attrib(data=data,obj="patient",key="gender_name")
|
||||
self.patient_country = self.get_value_from_attrib(data=data,obj="patient",key="country_name")
|
||||
self.patient_insurance_name = self.get_value_from_attrib(data=data,obj="patient",key="insurance_name")
|
||||
|
||||
self.km = self.get_value_from_attrib(data=data, obj="intervention", key="kilometers")
|
||||
self.intervention_start_time = self.get_value_from_attrib(data=data, obj="intervention", key="start_time")
|
||||
self.intervention_end_time = self.get_value_from_attrib(data=data, obj="intervention", key="end_time")
|
||||
self.intervention_base = self.get_value_from_attrib(data=data, obj="intervention", key="base_name")
|
||||
self.intervention_team = self.get_value_from_attrib(data=data, obj="intervention", key="team_name")
|
||||
self.intervention_type = self.get_value_from_attrib(data=data, obj="intervention", key="type")
|
||||
|
||||
self.intervention_dest_name = self.get_value_from_attrib(data=data, obj="intervention", key="destination_name")
|
||||
self.intervention_dest_street = self.get_value_from_attrib(data=data, obj="intervention", key="destination_street")
|
||||
self.intervention_dest_street_number = self.get_value_from_attrib(data=data, obj="intervention", key="destination_street_number")
|
||||
self.intervention_dest_postal_code = self.get_value_from_attrib(data=data, obj="intervention", key="destination_postal_code")
|
||||
self.intervention_dest_city = self.get_value_from_attrib(data=data, obj="intervention", key="destination_city")
|
||||
|
||||
self.intervention_site_name = self.get_value_from_attrib(data=data, obj="intervention", key="site_name")
|
||||
self.intervention_site_street = self.get_value_from_attrib(data=data, obj="intervention", key="site_street")
|
||||
self.intervention_site_street_number = self.get_value_from_attrib(data=data, obj="intervention", key="site_street_number")
|
||||
self.intervention_site_postal_code = self.get_value_from_attrib(data=data, obj="intervention", key="site_postal_code")
|
||||
self.intervention_site_city = self.get_value_from_attrib(data=data, obj="intervention", key="site_city")
|
||||
|
||||
|
||||
|
||||
def on_error_not_found(self, obj, key):
|
||||
print(f"ERROR AttribLink => obi[{obj}] and key [{key}] not found.")
|
||||
|
||||
def get_value_from_attrib(self,data,obj, key):
|
||||
#print(f"get value from {obj}=>{key}")
|
||||
ret = False
|
||||
t_obj = None
|
||||
if obj == "data":
|
||||
t_obj = data.data
|
||||
key_src = self.src_key_invoice
|
||||
elif obj == "debtor":
|
||||
t_obj = data.Debtor
|
||||
key_src = self.src_key_debtor
|
||||
elif obj == "patient":
|
||||
t_obj = data.Patient
|
||||
key_src = self.src_key_patient
|
||||
elif obj == "article":
|
||||
t_obj = data
|
||||
key_src = self.src_key_article
|
||||
elif obj == "invoice":
|
||||
t_obj = data
|
||||
key_src = self.src_key_invoice
|
||||
if obj == "intervention":
|
||||
t_obj = data.Intervention
|
||||
key_src = self.src_key_intervention
|
||||
|
||||
|
||||
for t_key in key_src[key]:
|
||||
if t_key in t_obj:
|
||||
ret = t_obj[t_key]
|
||||
|
||||
|
||||
if ret == False:
|
||||
self.on_error_not_found(obj, key)
|
||||
return None
|
||||
else:
|
||||
return ret
|
||||
@@ -7,6 +7,7 @@ class cls_Addresses:
|
||||
self.items.append(items)
|
||||
def get_item_by_AVS(self, seek):
|
||||
for item in self.items:
|
||||
|
||||
if item.AVS == seek:
|
||||
return item
|
||||
|
||||
@@ -18,5 +19,7 @@ class cls_addresse:
|
||||
firstName = None
|
||||
birth = None
|
||||
street = None
|
||||
street_cpl = None
|
||||
npa = None
|
||||
city = None
|
||||
addr_2 = None
|
||||
156
class_debitors.py
Normal file
156
class_debitors.py
Normal file
@@ -0,0 +1,156 @@
|
||||
import pickle
|
||||
import os
|
||||
import shutil
|
||||
|
||||
class cls_debitors:
|
||||
items = []
|
||||
file_path = ""
|
||||
|
||||
def __init__(self, filepath=".temp"):
|
||||
self.items = []
|
||||
self.file_path = filepath
|
||||
|
||||
if not os.path.exists(self.file_path):
|
||||
os.makedirs(os.path.abspath(self.file_path))
|
||||
|
||||
if not os.path.isfile(os.path.join(self.file_path, f"debitors.bin")):
|
||||
shutil.copy("debitors_src.bin", os.path.join(self.file_path, f"debitors.bin"))
|
||||
self.load_debitors()
|
||||
|
||||
def print_all_debs(self):
|
||||
for elem in self.items:
|
||||
print(f"Débiteur:{elem.code} {elem.names}")
|
||||
def get_deb_by_code(self, code):
|
||||
for deb in self.items:
|
||||
if deb.code == int(code):
|
||||
return deb
|
||||
return None
|
||||
|
||||
def get_names_by_code(self, code):
|
||||
default = []
|
||||
if int(code) < 100:
|
||||
return default
|
||||
for deb in self.items: # items contient l’ensemble des objects détiteur provenant d’un export BDD
|
||||
if deb.code == int(code):
|
||||
return deb.names
|
||||
return default
|
||||
|
||||
def is_in_debitor_name(self, code, search_name):
|
||||
names = self.get_names_by_code(code)
|
||||
if search_name in names:
|
||||
return True
|
||||
return False
|
||||
|
||||
def add_items(self, code, name):
|
||||
for deb in self.items:
|
||||
if deb.code == int(code):
|
||||
deb.add_name(name)
|
||||
return
|
||||
deb = cls_debitor()
|
||||
deb.code = int(code)
|
||||
deb.add_name(name)
|
||||
self.items.append(deb)
|
||||
|
||||
def save_debitors(self):
|
||||
if len(self.items) > 0:
|
||||
with open(os.path.join(self.file_path, f"debitors.bin"), "wb") as file:
|
||||
pickle.dump(self.items, file)
|
||||
|
||||
def load_debitors(self):
|
||||
try:
|
||||
with open(os.path.join(self.file_path, f"debitors.bin"), "rb") as file:
|
||||
self.items = pickle.load(file)
|
||||
except:
|
||||
print("Erreur lecture fichier débiteur")
|
||||
|
||||
|
||||
|
||||
class cls_debitor:
|
||||
code = ""
|
||||
names = []
|
||||
|
||||
def __init__(self):
|
||||
self.code = ""
|
||||
self.names = []
|
||||
|
||||
def add_name(self, name):
|
||||
self.names.append(name)
|
||||
|
||||
|
||||
o_debs = cls_debitors(filepath=os.getenv('APPDATA') + '\Attrib2Biz\.temp')
|
||||
|
||||
|
||||
|
||||
|
||||
'''
|
||||
|
||||
o_deb = cls_debitor()
|
||||
o_deb.code = 100
|
||||
o_deb.add_name("HRC Rennaz")
|
||||
o_deb.add_name("Hôpital riviera chablais Rennaz")
|
||||
|
||||
o_debs.items.append(o_deb)
|
||||
|
||||
o_deb = cls_debitor()
|
||||
o_deb.code = 101
|
||||
o_deb.add_name("HVS")
|
||||
|
||||
o_debs.items.append(o_deb)
|
||||
|
||||
o_debs.add_items(102,"Clinique Bernoise Montana - Secrétariat médical")
|
||||
o_debs.add_items(102,"Clinique Bernoise Montana")
|
||||
|
||||
o_debs.add_items(100,'Hôpital Riviera-Chablais Vaud-Valais - Fournisseurs ')
|
||||
o_debs.add_items(101,'Hôpital du Valais - Direction des Finances/Service des fournisseurs ')
|
||||
o_debs.add_items(102,'Clinique Bernoise Montana - Secrétariat médical ')
|
||||
o_debs.add_items(103,'Clinique Genevoise de Montana - Comptabilité ')
|
||||
o_debs.add_items(104,'Clinique SUVA - Comptabilité ')
|
||||
o_debs.add_items(105,'Fondation de Nant - Comptabilité ')
|
||||
o_debs.add_items(106,"Service de l'action sociale - Office de l'asile - Administration RAValais")
|
||||
o_debs.add_items(107,'OCVS - Comptabilité')
|
||||
o_debs.add_items(108,'Suva Aarau - Service Center')
|
||||
o_debs.add_items(109,'Suva Basel - Service Center')
|
||||
o_debs.add_items(110,'Suva Bellinzona - Assicurazione militare - Service Center')
|
||||
o_debs.add_items(111,'Suva Bellinzona - Service Center')
|
||||
o_debs.add_items(112,'Suva Bern - Militärversicherung - Service Center')
|
||||
o_debs.add_items(113,'Suva Chur - Service Center')
|
||||
o_debs.add_items(114,'Suva Delémont - Service Center')
|
||||
o_debs.add_items(115,'Suva Fribourg - Service Center')
|
||||
o_debs.add_items(116,'Suva Genève - Assurance militaire - Service Center')
|
||||
o_debs.add_items(117,'Suva Genève - Service Center')
|
||||
o_debs.add_items(118,'Suva La Chaux-de-Fonds - Service Center')
|
||||
o_debs.add_items(119,'Suva Lausanne - Service Center')
|
||||
o_debs.add_items(120,'Suva Luzern - Service Center')
|
||||
o_debs.add_items(121,'Suva Sion - Service Center')
|
||||
o_debs.add_items(122,'Suva Solothurn - Service Center')
|
||||
o_debs.add_items(123,'Suva St-Gallen - Militärversicherung - Service Center')
|
||||
o_debs.add_items(124,'Suva Zurich - Service Center')
|
||||
o_debs.add_items(125,'Antaé - Allianz Worldwide Care')
|
||||
o_debs.add_items(126,'Terre des Hommes - Soins aux Enfants ')
|
||||
o_debs.add_items(127,'REGA')
|
||||
o_debs.add_items(128,'CNAS Assistance')
|
||||
o_debs.add_items(129,'Clinique Lucernoise Montana - Comptabilité ')
|
||||
o_debs.add_items(130,'AAA Alpine Air Ambulance AG')
|
||||
o_debs.add_items(131,'CHUV')
|
||||
o_debs.add_items(132,'Clinique CIC Collombey SA - c/o Clinique CIC Suisse SA ')
|
||||
o_debs.add_items(133,'Clinique CIC Montreux SA ')
|
||||
o_debs.add_items(134,'Clinique CIC Saxon SA - c/o Clinique CIC Saxon SA ')
|
||||
o_debs.add_items(135,'Clinique CIC Suisse SA ')
|
||||
o_debs.add_items(136,'MedSTAR - Swiss Mobile Healthcare Alliance Sàrl')
|
||||
o_debs.add_items(137,'RFSM - Réseau fribourgeois de santé mentale ')
|
||||
o_debs.add_items(138,'Swiss Medical Network - GSMN Suisse SA - Clinique de Genolier')
|
||||
o_debs.add_items(139,'Swiss Medical Network - GSMN Suisse SA - Clinique de Montchoisi')
|
||||
o_debs.add_items(140,'Swiss Medical Network - GSMN Suisse SA - Clinique Valmont')
|
||||
o_debs.add_items(141,'Swiss Medical Network - Swiss Medical Network Hospitals SA - Hôpital de la Providence')
|
||||
o_debs.add_items(142,'Swiss Medical Network - Swiss Medical Network Hospitals SA - Clinique Montbrillant')
|
||||
o_debs.add_items(143,'Swiss Medical Network - Swiss Medical Network Hospitals SA - Clinique Générale Ste-Anne')
|
||||
o_debs.add_items(144,'Swiss Medical Network - Swiss Medical Network Hospitals SA - Clinique de Valère')
|
||||
o_debs.add_items(146,'Leukerbad Clinic - Comptabilité')
|
||||
o_debs.add_items(147,'Hôpital psychiatrique de Belle-Idée')
|
||||
o_debs.add_items(148,'Direction générale de la Santé VD')
|
||||
o_debs.add_items(149,'Swiss Risk & Care')
|
||||
o_debs.save_debitors()
|
||||
|
||||
|
||||
|
||||
'''
|
||||
@@ -16,6 +16,57 @@ class cls_Invoice:
|
||||
self.data = obj
|
||||
self.a_index = {"invoice": [], "intervention": [], "patient": [], "debtor": [], "articles": []}
|
||||
self.index_counter = 0
|
||||
self.format_debitor_addr_2()
|
||||
def format_debitor_addr_2(self):
|
||||
debitor = self.Debtor
|
||||
con = ""
|
||||
concat_str = ""
|
||||
if "name" in debitor.keys():
|
||||
if debitor["name"] is not None:
|
||||
concat_str += con + debitor["name"]
|
||||
# con = "#chr(13)##chr(10)#"
|
||||
con = "\n"
|
||||
|
||||
if debitor["gender"] is not None:
|
||||
concat_str += con + "Monsieur" if debitor["gender"] == "Masculin" else con + "Madame"
|
||||
# con = "#chr(13)##chr(10)#"
|
||||
con = "\n"
|
||||
if debitor["lastname"] is not None:
|
||||
concat_str += con + self.ifNotNull(debitor["lastname"]) + " " + self.ifNotNull(
|
||||
debitor["firstname"])
|
||||
# con = "#chr(13)##chr(10)#"
|
||||
con = "\n"
|
||||
if debitor["complement"] is not None:
|
||||
concat_str += con + debitor["complement"]
|
||||
# con = "#chr(13)##chr(10)#"
|
||||
con = "\n"
|
||||
if debitor["street"] is not None:
|
||||
concat_str += con + self.ifNotNull(debitor["street"]) + " " + self.ifNotNull(
|
||||
debitor["street_number"])
|
||||
# con = "#chr(13)##chr(10)#"
|
||||
con = "\n"
|
||||
if debitor["city"] is not None:
|
||||
concat_str += con + self.ifNotNull(debitor["postal_code"]) + " " + self.ifNotNull(
|
||||
debitor["city"])
|
||||
# con = "#chr(13)##chr(10)#"
|
||||
con = "\n"
|
||||
if debitor["country_name"] != "Suisse":
|
||||
concat_str += con + debitor["country_name"]
|
||||
# con = "#chr(13)##chr(10)#"
|
||||
con = "\n"
|
||||
self.Patient["addr_2"] = concat_str
|
||||
self.Patient["selfish"] = self.is_addr_2_selfish(self.Patient)
|
||||
def is_addr_2_selfish(self, patient):
|
||||
print(patient)
|
||||
temp_addr_2 = str(patient["addr_2"]).replace("Monsieur","").replace("Madame","").replace("\n","").replace(" ","")
|
||||
str_compare = self.ifNotNull(patient['lastname']).replace('.','') + self.ifNotNull(patient['firstname']).replace('.','') + self.ifNotNull(patient['complement']).strip()+ self.ifNotNull(patient['street']).strip() + self.ifNotNull(patient['street_number']).strip() + self.ifNotNull(patient['postal_code']).strip() +self.ifNotNull(patient['city']).strip()
|
||||
str_compare = str_compare.replace(" ","")
|
||||
print(f"is_addr_2_selfish ? {str_compare} <> {temp_addr_2} = {str_compare == temp_addr_2}")
|
||||
return str_compare == temp_addr_2
|
||||
def ifNotNull(self, value, ret=""):
|
||||
if value == None or value == "None":
|
||||
return ret
|
||||
return value.strip()
|
||||
|
||||
class cls_Col:
|
||||
data = []
|
||||
|
||||
16
counter.py
Normal file
16
counter.py
Normal file
@@ -0,0 +1,16 @@
|
||||
import os
|
||||
|
||||
def count_chars_in_folder(folder_path):
|
||||
total_chars = 0
|
||||
for filename in os.listdir(folder_path):
|
||||
filepath = os.path.join(folder_path, filename)
|
||||
if os.path.isfile(filepath):
|
||||
with open(filepath, 'r') as file:
|
||||
content = file.read()
|
||||
total_chars += len(content)
|
||||
print(f"fichier {filepath} = { len(content)}")
|
||||
return total_chars
|
||||
|
||||
folder_path = '.' # mettre le chemin absolu vers le dossier ici
|
||||
total_chars = count_chars_in_folder(folder_path)
|
||||
print(f"Le nombre total de caractères dans les fichiers du dossier {folder_path} est : {total_chars}")
|
||||
288
custom_popup.py
Normal file
288
custom_popup.py
Normal file
@@ -0,0 +1,288 @@
|
||||
from tkinter import *
|
||||
from tkinter import font
|
||||
from datetime import datetime
|
||||
from tkinter import messagebox
|
||||
|
||||
class Check_addresses_popup(Toplevel):
|
||||
x_row = 0
|
||||
no_selection_possible = False
|
||||
def __init__(self, parent, item_1=None, item_2=None, debitor=None, factureID=""):
|
||||
super().__init__(parent)
|
||||
|
||||
if(item_1["complement"] is None):
|
||||
item_1["complement"] = ""
|
||||
|
||||
self.geometry(f"700x450+{parent.winfo_x() + 25 }+{parent.winfo_y() +25 }")
|
||||
self.resizable(True,True)
|
||||
self.iconbitmap("./logo_clerc_03X_icon.ico")
|
||||
self.title(f"Choix de l'adresse à conserver {item_1['fip_number']} / {factureID}. Code débiteur: {debitor['code']}")
|
||||
|
||||
self.columnconfigure(0, weight=1)
|
||||
self.columnconfigure(1, weight=1)
|
||||
|
||||
lbf_new = LabelFrame(self, text="Données Attrib")
|
||||
lbf_new.grid(row=0, column=0, sticky='WE', padx=5, pady=5)
|
||||
|
||||
lbf_old = LabelFrame(self, text="Données Winbiz")
|
||||
lbf_old.grid(row=0, column=1, sticky='NSEW', padx=5, pady=5)
|
||||
|
||||
lbf_addr_2_new = LabelFrame(self, text="Livraison Attrib")
|
||||
lbf_addr_2_new.grid(row=1, column=0, sticky='WE', padx=5, pady=5)
|
||||
|
||||
lbf_addr_2_old = LabelFrame(self, text="Livraison Winbiz")
|
||||
lbf_addr_2_old.grid(row=1, column=1, sticky='NSEW', padx=5, pady=5)
|
||||
|
||||
str_address_1 = ""
|
||||
|
||||
fonts = []
|
||||
|
||||
self.x_row = 0
|
||||
self.add_compares_element(new_frame=lbf_new,old_frame=lbf_old,label="N° AVS de l'adresse:",str1=self.ifNotNull(item_1['insurance_policy_number']).replace('.',''), str2=item_2.AVS)
|
||||
self.add_compares_element(new_frame=lbf_new, old_frame=lbf_old, label="Nom:", str1=self.ifNotNull(item_1['lastname']), str2=item_2.lastName)
|
||||
self.add_compares_element(new_frame=lbf_new, old_frame=lbf_old, label="Prénom:", str1=self.ifNotNull(item_1['firstname']), str2=item_2.firstName)
|
||||
self.add_compares_element(new_frame=lbf_new, old_frame=lbf_old, label="Date de naissance:", str1=datetime.strptime(self.ifNotNull(item_1['birthdate']), "%Y-%m-%d").strftime("%d.%m.%Y"), str2=item_2.birth)
|
||||
self.add_compares_element(new_frame=lbf_new, old_frame=lbf_old, label="Adresse:", str1=f"{self.ifNotNull(item_1['street']).strip()} {self.ifNotNull(item_1['street_number']).strip()}", str2=item_2.street.strip())
|
||||
self.add_compares_element(new_frame=lbf_new, old_frame=lbf_old, label="Complément:", str1=f"{self.ifNotNull(item_1['complement']).strip()}", str2=item_2.street_cpl.strip())
|
||||
self.add_compares_element(new_frame=lbf_new, old_frame=lbf_old, label="NPA/Localité:", str1=f"{self.ifNotNull(item_1['postal_code'])} {self.ifNotNull(item_1['city'])}", str2=f"{item_2.npa} {item_2.city}")
|
||||
|
||||
|
||||
if int(debitor["code"]) < 100:
|
||||
if item_1["selfish"]:
|
||||
force_color = "green"
|
||||
else:
|
||||
force_color = None
|
||||
self.add_compares_element(new_frame=lbf_addr_2_new, old_frame=lbf_addr_2_old, label="Adresse livraison:", str1=item_1["addr_2"],
|
||||
str2=self.ifNotNull(item_2.addr_2),force_color_1=force_color)
|
||||
|
||||
|
||||
str_address_1 += self.ifNotNull(item_1['insurance_policy_number']).replace('.', '')
|
||||
str_address_1 += self.ifNotNull(item_1['lastname']).strip()
|
||||
str_address_1 +=self.ifNotNull( item_1['firstname']).strip()
|
||||
str_address_1 += datetime.strptime(item_1['birthdate'], "%Y-%m-%d").strftime("%d.%m.%Y")
|
||||
str_address_1 += f"{self.ifNotNull(item_1['street']).strip()} {self.ifNotNull(item_1['street_number']).strip()}"
|
||||
str_address_1 += f"{self.ifNotNull(item_1['complement']).strip()}"
|
||||
str_address_1 += f"{self.ifNotNull(item_1['postal_code'])} {self.ifNotNull(item_1['city'])}"
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
str_address_2 = ""
|
||||
|
||||
str_address_2 += item_2.AVS
|
||||
str_address_2 += item_2.lastName
|
||||
str_address_2 += item_2.firstName
|
||||
str_address_2 += item_2.birth
|
||||
str_address_2 += f"{item_2.street.strip()}"
|
||||
str_address_2 += f"{item_2.street_cpl.strip()}"
|
||||
str_address_2 += f"{item_2.npa} {item_2.city}"
|
||||
|
||||
self.listbox = Listbox(self, height=3, width=35)
|
||||
self.listbox.grid(row=2,column=0, columnspan= 2, pady=15,padx=15, sticky='NSEW')
|
||||
|
||||
self.btn = Button(self, text="Valider", command=self.select)
|
||||
self.btn.grid(row=3,columnspan=2 , pady=10,padx=10, sticky='NSEW')
|
||||
|
||||
for (idd, info) in ((0, "Winbiz"), (1, "Attrib")) :
|
||||
self.listbox.insert(END, info)
|
||||
|
||||
if int(debitor["code"]) >= 100:
|
||||
self.listbox.delete(0,END)
|
||||
self.listbox.delete(0, END)
|
||||
|
||||
self.listbox.insert(END, f"Aucun changement possible, code débiteur {debitor['code']}")
|
||||
self.listbox.configure(state='disabled')
|
||||
self.no_selection_possible = True
|
||||
|
||||
|
||||
if int(debitor["code"]) == 1:
|
||||
if str_address_1 == str_address_2:
|
||||
self.listbox.selection_set(0)
|
||||
print("adresse identique")
|
||||
else:
|
||||
self.listbox.selection_set(1)
|
||||
print(f"adresse différente [{str_address_1}] ({str_address_2})")
|
||||
|
||||
def ifNotNull(self, value, ret=""):
|
||||
if value == None or value == "None":
|
||||
return ret
|
||||
return value.strip()
|
||||
|
||||
def add_compares_element(self,new_frame, old_frame,str1, str2, label, force_color_1=None):
|
||||
label_font = font.Font(weight='bold', size=9)
|
||||
|
||||
value_color_1 = "black"
|
||||
value_color_2 = "black"
|
||||
con = ""
|
||||
if str1 != str2:
|
||||
value_color_1 = "red"
|
||||
value_color_2 = "red"
|
||||
con = "*"
|
||||
if force_color_1 is not None:
|
||||
value_color_1 = force_color_1
|
||||
|
||||
Label(new_frame, text=str(label), font=label_font).grid(row=self.x_row, column=0, sticky="W")
|
||||
Label(new_frame, text=con + str(str1) + con, fg=value_color_1, anchor="w", justify=LEFT).grid(row=self.x_row, column=1, sticky="W")
|
||||
Label(old_frame, text=str(label), font=label_font).grid(row=self.x_row, column=0, sticky="W")
|
||||
Label(old_frame, text=con + str(str2) + con, fg=value_color_2, anchor="w", justify=LEFT).grid(row=self.x_row, column=1, sticky="W")
|
||||
|
||||
self.x_row += 1
|
||||
|
||||
self.selection = None
|
||||
def destroy(self):
|
||||
if self.selection is None:
|
||||
self.selection = True
|
||||
super().destroy()
|
||||
|
||||
def select(self):
|
||||
selection = self.listbox.curselection()
|
||||
if selection:
|
||||
self.selection = self.listbox.get(selection[0])
|
||||
self.selection = True if self.selection == "Attrib" else False
|
||||
self.destroy()
|
||||
if self.no_selection_possible:
|
||||
self.destroy()
|
||||
|
||||
def show(self):
|
||||
self.deiconify()
|
||||
self.wm_protocol("WM_DELETE_WINDOW", self.destroy)
|
||||
self.wait_window(self)
|
||||
return self.selection
|
||||
|
||||
class Check_debitor_popup(Toplevel):
|
||||
x_row = 0
|
||||
no_selection_possible = False
|
||||
def __init__(self, parent, debitor=None, lists_available_names=None, factureID=None,fip=None,object=None):
|
||||
super().__init__(parent)
|
||||
|
||||
self.object = object
|
||||
self.debitor = debitor
|
||||
|
||||
self.inp_code = StringVar()
|
||||
self.inp_code.set(debitor['code'])
|
||||
|
||||
self.geometry(f"900x275+{parent.winfo_x() + 25 }+{parent.winfo_y() +25 }")
|
||||
self.resizable(True,True)
|
||||
self.iconbitmap("./logo_clerc_03X_icon.ico")
|
||||
self.title(f"Incohérence sur les débiteurs {fip} / {factureID}. Code débiteur: {debitor['code']}")
|
||||
|
||||
self.columnconfigure(0, weight=1)
|
||||
self.columnconfigure(1, weight=1)
|
||||
|
||||
Label(self,text="Une incohérence a été trouvée entre le code débiteur saisi dans Attrib et le code débiteur saisi dans Attrib. \nIls ne correspondent pas.Le code débiteur présent dans le champs Code Saisi sera utiliser pour la facture winbiz \nMerci de vérifier et modifier le code débiteur puis cliquer sur Valider.", wraplength= 950, justify=LEFT).grid(row=0,column=0, columnspan=2, sticky="W")
|
||||
|
||||
lbf_new = LabelFrame(self, text="Données Attrib")
|
||||
lbf_new.grid(row=1, column=0, sticky='WE', padx=5, pady=5)
|
||||
|
||||
label_font = font.Font(weight='bold', size=9)
|
||||
Label(lbf_new, text="Code saisi", font=label_font).grid(row=0, column=0, sticky="W")
|
||||
Entry(lbf_new, textvariable=self.inp_code, width= 10).grid(row=0, column=1, sticky="W", pady= 10)
|
||||
|
||||
|
||||
|
||||
Label(lbf_new, text="Débiteur sélectionné dans Attrib", font=label_font).grid(row=1, column=0, sticky="W")
|
||||
text_name = Text(lbf_new, fg="red", height=3,width= 30)
|
||||
text_name.grid(row=1, column=1, sticky="W")
|
||||
if 'name' not in debitor:
|
||||
debitor['name'] = ""
|
||||
text_name.insert(END,debitor['name'])
|
||||
text_name.configure(state='disabled')
|
||||
|
||||
|
||||
lbf_old = LabelFrame(self, text="Noms possibles")
|
||||
lbf_old.grid(row=1, column=1, sticky='NSEW', padx=5, pady=5)
|
||||
|
||||
|
||||
|
||||
self.listbox = Text(lbf_old, height=5, width=50)
|
||||
self.listbox.grid(row=1,column=0, columnspan= 2, pady=15,padx=15, sticky='NSEW')
|
||||
|
||||
for info in lists_available_names :
|
||||
self.listbox.insert(END, f"{info}\n")
|
||||
|
||||
self.listbox.configure(state='disabled')
|
||||
self.no_selection_possible = True
|
||||
|
||||
menu_bar = Menu(self)
|
||||
menu_param = Menu(menu_bar, tearoff=0)
|
||||
menu_param.add_command(label="Ajouter à la liste", command=self.add)
|
||||
menu_bar.add_cascade(label="Paramètre", menu=menu_param)
|
||||
|
||||
self.config(menu=menu_bar)
|
||||
|
||||
self.btn = Button(self, text="Valider", command=self.destroy)
|
||||
self.btn.grid(row=2,column=0, columnspan= 2, pady=10,padx=10, sticky='NSEW')
|
||||
|
||||
|
||||
def add(self):
|
||||
self.destroy()
|
||||
if self.object is not None:
|
||||
self.object.add_items(code=self.inp_code.get(), name=self.debitor["name"])
|
||||
self.object.save_debitors()
|
||||
def destroy(self):
|
||||
super().destroy()
|
||||
|
||||
def show(self):
|
||||
self.deiconify()
|
||||
self.wm_protocol("WM_DELETE_WINDOW", self.destroy)
|
||||
self.wait_window(self)
|
||||
print("nouveau code = "+ self.inp_code.get())
|
||||
return self.inp_code.get()
|
||||
|
||||
|
||||
class Input_popup(Toplevel):
|
||||
x_row = 0
|
||||
no_selection_possible = False
|
||||
|
||||
def __init__(self, parent, text="Veuillez saisir la nouvelle valeur.", default="" ,factureID=None, fip=None, object=None):
|
||||
super().__init__(parent)
|
||||
|
||||
self.object = object
|
||||
|
||||
|
||||
self.inp_value = StringVar()
|
||||
if default is not None:
|
||||
self.inp_value.set(default)
|
||||
|
||||
|
||||
self.geometry(f"650x120+{parent.winfo_x() + 25}+{parent.winfo_y() + 25}")
|
||||
self.resizable(True, True)
|
||||
self.iconbitmap("./logo_clerc_03X_icon.ico")
|
||||
self.title(f"Saisir une valeur {fip} / {factureID}.")
|
||||
|
||||
self.columnconfigure(0, weight=1)
|
||||
self.columnconfigure(1, weight=1)
|
||||
|
||||
lbf_new = LabelFrame(self, text=text)
|
||||
lbf_new.grid(row=0, column=0, sticky='WE', padx=5, pady=5)
|
||||
|
||||
label_font = font.Font(weight='bold', size=9)
|
||||
Label(lbf_new, text="", font=label_font).grid(row=0, column=0, sticky="W")
|
||||
input_entry = Entry(lbf_new, textvariable=self.inp_value, width=100)
|
||||
input_entry.grid(row=0, column=1, sticky="W", pady=10)
|
||||
input_entry.focus()
|
||||
self.after(0,input_entry.focus)
|
||||
|
||||
|
||||
self.btn = Button(self, text="Valider", command=self.destroy)
|
||||
self.btn.grid(row=2, column=0, pady=10, padx=10, sticky='NSEW')
|
||||
|
||||
def add(self):
|
||||
self.destroy()
|
||||
if self.object is not None:
|
||||
self.object.add_items(code=self.inp_code.get(), name=self.debitor["name"])
|
||||
self.object.save_debitors()
|
||||
|
||||
def destroy(self):
|
||||
if self.inp_value.get() is None or self.inp_value.get() == "":
|
||||
messagebox.showerror(title="ERREUR", message="Veuillez saisir une valeur !")
|
||||
self.focus()
|
||||
else:
|
||||
super().destroy()
|
||||
|
||||
def show(self):
|
||||
self.deiconify()
|
||||
self.wm_protocol("WM_DELETE_WINDOW", self.destroy)
|
||||
self.wait_window(self)
|
||||
print("nouvelle valeur = " + self.inp_value.get())
|
||||
return self.inp_value.get()
|
||||
BIN
debitors_src.bin
Normal file
BIN
debitors_src.bin
Normal file
Binary file not shown.
@@ -1 +1 @@
|
||||
20220606-1330
|
||||
20241109-1726
|
||||
BIN
requirements.txt
BIN
requirements.txt
Binary file not shown.
@@ -1 +1,2 @@
|
||||
VERSION = "20220606-1330"
|
||||
VERSION = "20241109-1726"
|
||||
|
||||
|
||||
Reference in New Issue
Block a user