URL: https://linuxfr.org/forums/general-cherche-logiciel/posts/factur-x-extension-realisee-par-alexis-de-lattre Title: Factur X Extension réalisée par Alexis de Lattre Authors: Patrice1 Date: 2025年11月27日T14:31:09+01:00 License: CC By-SA Tags: facturation et libreoffice Score: 2 Bonjour à tous. J'utilise l'extension Factur X réalisée par Alexis de Lattre avec libre office sous ubuntu. Je l'ai intégré dans un programme de facturation qui contient toutes les macros en oobasic. Rappel de facture,journal, archivage, envoie automatique etc. En fait il est plus complet que les programmes du commerce et fonctionne à merveille depuis de nombreuses années. La factur X ne me convenait pas totalement car le nom n'atait pas automatiquement mentionné et les factures X n'étaient pas indexées dans des répertoires spécifiques par mois. Dans la feuille 2 'ligne 35 j'ai indiqué le chemin relatif et j'ai modifié le scripte Python ligne 293 du script ```python 'invoice_path': { 'type': 'char', 'required': True, 'line': 35, ``` Et ligne 402 à 500 pour indiquer le chemin relatif de sauvegarde. ```python # adaptation arc fiduciaire par Patrice Lemmonnier ligne 402 à 500 def generate_facturx_invoice_v1(button_arg=None): doc = XSCRIPTCONTEXT.getDocument() macro_path = os.path.dirname(uno.fileUrlToSystemPath(__file__)) localedir = os.path.join(macro_path, 'i18n') gettext.bindtextdomain('facturx_macro', localedir=localedir) gettext.textdomain('facturx_macro') if len(doc.Sheets) < 2: return msg_box(doc, _("The spreadsheet must contain at least 2 tabs.")) inv_sheet = doc.Sheets[0] data_sheet = doc.Sheets[1] # filter data data = get_and_check_data(doc, data_sheet) if not data: return # prepare LO PDF export pdf_option1 = PropertyValue() pdf_option1.Name = "SelectPdfVersion" pdf_option1.Value = 1 pdf_option2 = PropertyValue() pdf_option2.Name = "Selection" pdf_option2.Value = inv_sheet pdf_options = (pdf_option1, pdf_option2) pdf_export_arg1 = PropertyValue() pdf_export_arg1.Name = "FilterName" pdf_export_arg1.Value = "calc_pdf_Export" pdf_export_arg2 = PropertyValue() pdf_export_arg2.Name = "FilterData" pdf_export_arg2.Value = uno.Any("[]com.sun.star.beans.PropertyValue", pdf_options) pdf_export_args = (pdf_export_arg1, pdf_export_arg2) pdf_tmp_file = NamedTemporaryFile('w', prefix='libo-fx-', suffix='.pdf') pdf_tmp_file_url = uno.systemPathToFileUrl(pdf_tmp_file.name) doc.storeToURL(pdf_tmp_file_url, pdf_export_args) # generate XML xml_byte = generate_facturx_xml(data) if not xml_byte: return # Additional attachments additional_attachments = {} if data.get('attachment_count'): for a in range(data['attachment_count']): attach_title = _('Select attachment No. %d') % (a + 1) attachment_url = open_filepicker(attach_title, mode=0) if attachment_url: attach_filename = uno.fileUrlToSystemPath(attachment_url) additional_attachments[attach_filename] = '' # ---------------------------------------------------- # Enregistrement automatique sans boîte de dialogue # ---------------------------------------------------- output_dir = data['invoice_path'] # output_dir = os.path.expanduser(output_dir) # output_dir = os.path.expanduser("~/'invoice_path'/FACTURE X") if not os.path.exists(output_dir): os.makedirs(output_dir) auto_filename = f"FACTURE_{data['invoice_date'].strftime('%Y-%m-%d')}_{data['invoice_number']}.pdf" fx_pdf_filename = os.path.join(output_dir, auto_filename) fx_pdf_filename_url = uno.systemPathToFileUrl(fx_pdf_filename) # PDF metadata pdf_metadata = { 'author': data['issuer_name'], 'keywords': ','.join(['Factur-X', _('Invoice')]), 'title': _('%s: Invoice %s') % ( data['issuer_name'], data['invoice_number']), 'subject': _('Factur-X invoice %s issued by %s') % ( data['invoice_number'], data['issuer_name']), } generate_facturx_from_file( pdf_tmp_file.name, xml_byte, facturx_level='minimum', check_xsd=False, pdf_metadata=pdf_metadata, output_pdf_file=fx_pdf_filename, additional_attachments=additional_attachments) pdf_tmp_file.close() ``` J'ai adressé mon scripte à Alexis de Lattre pour qu'il l'intègre à sa prochaine mise à jour. En tous cas l'envoie de mes factur X sur le Partenaire Agrée ets presque transparent puisqu'il suffit de sélectionner les fichiers des répertoires classés par mois et année et de les importer. Tout pourrait être automatisé mais c'est déja top. Bon courage à tous ...