def save_document_view(request): """ Save file (preavis) """ settings = request.registry.settings mails_templates_directory = settings['mails_templates_directory'] affaires_directory = settings['affaires_directory'] # Get request params affaire_id = str(request.params['affaire_id']) template = request.params['template'] values = request.params['values'] service_id = request.params[ 'service_id'] if 'service_id' in request.params else None relPath = request.params['relpath'].strip('/').strip( '\\') if 'relpath' in request.params else "" filename = request.params[ 'filename'] if 'filename' in request.params else None # Set output file name output_file_name = filename if filename is not None else template if service_id: service = request.dbsession.query(Service).filter( Service.id == service_id).first() output_file_name += "_" + service.abreviation relPath = service.relpath.strip('/').strip('\\') affaire_relpath = request.dbsession.query(Affaire).filter( Affaire.id == affaire_id).first().chemin if affaire_relpath is None: affaire_relpath = affaire_id affaire_path = os.path.normcase( os.path.join(affaires_directory, affaire_relpath)) filename = output_file_name + '.docx' file_path = os.path.normcase(os.path.join(affaire_path, relPath, filename)) if not os.path.exists(affaire_path): Utils.create_affaire_folder(request, affaire_path) # update affaire chemin affaire = request.dbsession.query(Affaire).filter( Affaire.id == affaire_id).first() affaire.chemin = affaire_relpath # Set context context = json.loads(values) for key in context.keys(): context[key] = RichText(context[key]) # Ouverture du document template doc = DocxTemplate( os.path.join(mails_templates_directory, template + ".docx")) # Replace values by keywords and save doc.render(context) doc.save(file_path) return {'filename': filename, "folderpath": relPath}
def download_affaire_document_view(request): """ Download document """ # Check connected if not Utils.check_connected(request): raise exc.HTTPForbidden() affaires_directory = request.registry.settings['affaires_directory'] affaire_id = request.params['affaire_id'] relpath = request.params['relpath'] filename = request.params['filename'] affaire_chemin = request.dbsession.query(Affaire).filter( Affaire.id == affaire_id).first().chemin file_path = os.path.normcase( os.path.join(affaires_directory, affaire_chemin, relpath, filename)) folder_path = os.path.exists(os.path.dirname(file_path)) if not folder_path: Utils.create_affaire_folder(request, folder_path) import urllib response = FileResponse(file_path, request=request, cache_max_age=86400) headers = response.headers headers['Content-Type'] = 'application/download' headers['Accept-Ranges'] = 'bite' headers[ 'Content-Disposition'] = 'attachment;filename=' + urllib.parse.quote( filename) return response
def save_document_view(request): """ Save file (preavis) """ settings = request.registry.settings mails_templates_directory = settings['mails_templates_directory'] affaires_directory = settings['affaires_directory'] # Get request params affaire_id = request.params['affaire_id'] template = request.params['template'] values = request.params['values'] service_id = request.params[ 'service_id'] if 'service_id' in request.params else None # Set output file name output_file_name = template relPath = "" if service_id: service = request.dbsession.query(Service).filter( Service.id == service_id).first() output_file_name = service.abreviation relPath = service.relpath date_time = datetime.now().strftime("%Y%m%d") filename = output_file_name + "_" + date_time + '.docx' file_path = os.path.normpath( os.path.join(affaires_directory, affaire_id, relPath, filename)) folder_path = os.path.dirname(file_path) if not os.path.exists(folder_path): Utils.create_affaire_folder(request, folder_path) # Set context context = json.loads(values) for key in context.keys(): context[key] = RichText(context[key]) # Ouverture du document template doc = DocxTemplate( os.path.join(mails_templates_directory, template + ".docx")) # Replace values by keywords and save doc.render(context) doc.save(file_path) return {'filename': filename}
def affaires_new_view(request): """ Add new affaire """ # Get role depending on affaire type affaire_type = request.params['type_id'] if 'type_id' in request.params else None # Permission (fonction) par défaut permission = request.registry.settings['affaire_edition'] # Affaire de cadastration if affaire_type == request.registry.settings['affaire_type_cadastration_id']: permission = request.registry.settings['affaire_cadastration_edition'] # Affaire de PPE elif affaire_type == request.registry.settings['affaire_type_ppe_id']: permission = request.registry.settings['affaire_ppe_edition'] # Affaire de révision d'abornement elif affaire_type == request.registry.settings['affaire_type_revision_abornement_id']: permission = request.registry.settings['affaire_revision_abornement_edition'] # Affaire de rétablissement de PFP3 elif affaire_type == request.registry.settings['affaire_type_retablissement_pfp3_id']: permission = request.registry.settings['affaire_retablissement_pfp3_edition'] # Affaire pcop elif affaire_type == request.registry.settings['affaire_type_part_copropriete_id']: permission = request.registry.settings['affaire_pcop_edition'] # Affaire mpd elif affaire_type == request.registry.settings['affaire_type_mpd_id']: permission = request.registry.settings['affaire_mpd_edition'] # Affaire autre elif affaire_type == request.registry.settings['affaire_type_autre_id']: permission = request.registry.settings['affaire_autre_edition'] # Check authorization if not Utils.has_permission(request, permission): raise exc.HTTPForbidden() model = Affaire() model = Utils.set_model_record(model, request.params) request.dbsession.add(model) # Récupèrer l'id de la nouvelle affaire request.dbsession.flush() # Créer le chemin du dossier de l'affaire if model.type_id != request.registry.settings['affaire_type_mpd_id']: affaire_chemin_full_path = os.path.join(request.registry.settings['affaires_directory'], str(model.id)) model.chemin = str(model.id) # chemin relatif else: affaire_chemin_full_path = None # Copier le dossier __template pour une nouvelle affaire if not affaire_chemin_full_path is None: Utils.create_affaire_folder(request, affaire_chemin_full_path) # Créer les formulaires de contrôle params = {'affaire_id': model.id} if not model.type_id in [int(request.registry.settings['affaire_type_part_copropriete_id']), int(request.registry.settings['affaire_type_autre_id'])]: if model.type_id == int(request.registry.settings['affaire_type_ppe_id']): # Create controle PPE Utils.addNewRecord(request, ControlePPE, params) else: # Create controle Mutation Utils.addNewRecord(request, ControleMutation, params) Utils.addNewRecord(request, SuiviMandat, params) Utils.addNewRecord(request, ControleGeometre, params) # Créer l'étape de création d'affaire params['etape_id'] = request.registry.settings['affaire_premiere_etape_defaut_id'] tmp = request.dbsession.query(AffaireType).filter(AffaireType.id == model.type_id).first() if tmp and tmp.logique_processus: if len(tmp.logique_processus) > 0: params['etape_id'] = tmp.logique_processus[0] params['operateur_id'] = request.params['operateur_id'] if 'operateur_id' in request.params else None params['datetime'] = datetime.now() Utils.addNewRecord(request, AffaireEtape, params) # Add facture if 'facture_client_id' in request.params: params = { 'type_id': request.registry.settings['facture_type_facture_id'], 'affaire_id': model.id, 'client_id': request.params['facture_client_id'], 'client_co_id': request.params['facture_client_co_id'] if 'facture_client_co_id' in request.params else None, 'client_complement': request.params['facture_client_complement'] if 'facture_client_complement' in request.params else None, 'client_premiere_ligne': request.params['facture_client_premiere_ligne'] if 'facture_client_premiere_ligne' in request.params else None, 'montant_mo': 0, 'montant_rf': 0, 'montant_mat_diff': 0, 'montant_tva': 0, 'montant_total': 0 } Utils.addNewRecord(request, Facture, params) return model.id