import copy from calendar import monthrange, day_name from config import conf from excel_parser import ExcelParser from datetime import date import constants import re regex_issue = re.compile(r"[A-Z]+2{0,1}[A-Z]{0,999}-\d+") class CreazionePacchettiParser(ExcelParser): progetti_autorizzati = [ 'AFCIFT', 'AFCUNITTEST', 'AMSOEBTOB', 'BENELUX', 'BMSSTD', 'DIPPY', 'DTDD', 'FGBLP', 'FGDTIT', 'FGIFT', 'FGMAIT', 'FGMMIT', 'FGMNIT', 'FGMRIT', 'FGMXIT', 'FGPOSFRH', 'GESTMAXIMA', 'HIGGOVALE', 'IFT', 'MCJ', 'MMCHINA', 'MMESPANA', 'MMGMBH', 'MMLTD', 'MMSAS', 'MMUSA', 'PIATTCHINA', 'POSSEDEDT', 'RESTOCKING', 'SPEDIZIONIERI', 'WFFATTURE', 'B2E', 'POS', 'FGMMJ' ] team_list = ['BMS', 'B2X', 'Listini'] rendicontazioni = ['Consuntivo', 'Progetto'] def __init__(self, **kwargs): kwargs['spreadsheetId'] = '1CS8y7ZBE_KghtSWHb5R2tZpMzzBInijnGgduTpqOIqM' kwargs['range_celle_utilizzate'] = 'A1:H1500' kwargs['nome_foglio'] = 'Foglio1' super(CreazionePacchettiParser, self).__init__(**kwargs) self.range_celle_utilizzate = kwargs['range_celle_utilizzate'] iniziamo = False self.list_pacchetti = [] dict_base = { 'codice_iniziativa': '', 'descrizione_iniziativa': '', 'progetto': '', 'team_di_sviluppo': '', 'rendicontazione': '', } mapping_colonne = { 0: 'cliente', 1: 'solo_pm', 2: 'codice_iniziativa', 3: 'descrizione_iniziativa', 4: 'progetto', 5: 'team_di_sviluppo', 6: 'rendicontazione', 7: 'stato', } for (indice_riga, riga) in enumerate(self.righe): tmp_dict = copy.deepcopy(dict_base) for (indice_colonna, cella) in enumerate(riga): if cella == 'Codice iniziativa': iniziamo = True break elif iniziamo: cella = cella.rstrip() tmp_dict[mapping_colonne[indice_colonna]] = { 'TRUE': True, 'FALSE': False, }.get(cella, cella) if all(( any(( not kwargs.get('check_pacchetto') and tmp_dict.get('stato', '') == 'TODO', kwargs.get('check_pacchetto') and kwargs['check_pacchetto'] == tmp_dict.get('codice_iniziativa', ''), )), tmp_dict.get('cliente', '') == 'MMFG', tmp_dict.get('solo_pm') in (True, False), tmp_dict.get('codice_iniziativa', '').startswith('FG'), len(tmp_dict.get('codice_iniziativa', '')) >= 5, len(tmp_dict.get('descrizione_iniziativa', '')) >= 6, tmp_dict.get('team_di_sviluppo', '') in self.team_list, tmp_dict.get('progetto', '') in self.progetti_autorizzati, tmp_dict.get('rendicontazione', '') in self.rendicontazioni, )): self.list_pacchetti += [tmp_dict] def imposta_stato(self, codice_iniziativa, stato): for (indice_riga, riga) in enumerate(self.righe): if next((True for cella in riga if cella == codice_iniziativa), False): self.righe[indice_riga][7] = stato break def aggiorna(self): self.service.spreadsheets().values().batchUpdate( spreadsheetId=self.spreadsheetId, body={ 'valueInputOption': 'USER_ENTERED', 'data': [ { 'range': self.range_celle_utilizzate, 'values': self.righe }, ] } ).execute()