diff --git a/htdocs/core/menus/standard/eldy.lib.php b/htdocs/core/menus/standard/eldy.lib.php index 6616d978876..8499c5d0bf0 100644 --- a/htdocs/core/menus/standard/eldy.lib.php +++ b/htdocs/core/menus/standard/eldy.lib.php @@ -312,9 +312,9 @@ function print_eldy_menu($db, $atarget, $type_user, &$tabMenu, &$menu, $noout = // Accounting $tmpentry = array( - 'enabled'=>(! empty($conf->comptabilite->enabled) || ! empty($conf->accounting->enabled) || ! empty($conf->asset->enabled)), - 'perms'=>(! empty($user->rights->compta->resultat->lire) || ! empty($user->rights->accounting->mouvements->lire) || ! empty($user->rights->asset->read)), - 'module'=>'comptabilite|accounting|asset' + 'enabled'=>(! empty($conf->comptabilite->enabled) || ! empty($conf->accounting->enabled) || ! empty($conf->asset->enabled) || ! empty($conf->intracommreport->enabled)), + 'perms'=>(! empty($user->rights->compta->resultat->lire) || ! empty($user->rights->accounting->mouvements->lire) || ! empty($user->rights->asset->read) || ! empty($user->rights->intracommreport->read)), + 'module'=>'comptabilite|accounting|asset|intracommreport' ); $menu_arr[] = array( 'name' => 'Accounting', @@ -333,7 +333,7 @@ function print_eldy_menu($db, $atarget, $type_user, &$tabMenu, &$menu, $noout = 'session' => ( ( $_SESSION["mainmenu"] && $_SESSION["mainmenu"] == "accountancy" ) ? 0 : 1 ), - 'loadLangs' => array("compta","accountancy","assets"), + 'loadLangs' => array("compta","accountancy","assets","intracommreport"), 'submenus' => array(), ); diff --git a/htdocs/core/modules/modIntracommreport.class.php b/htdocs/core/modules/modIntracommreport.class.php index 943e269c19c..dd1ab435609 100644 --- a/htdocs/core/modules/modIntracommreport.class.php +++ b/htdocs/core/modules/modIntracommreport.class.php @@ -112,6 +112,13 @@ class modIntracommreport extends DolibarrModules $this->rights[$r][3] = 0; $this->rights[$r][4] = 'write'; + $this->rights[$r][0] = 68004; + $this->rights[$r][1] = 'Delete intracomm report'; + $this->rights[$r][2] = 'd'; + $this->rights[$r][3] = 0; + $this->rights[$r][4] = 'delete'; + $r++; + // Main menu entries $this->menu = array(); // List of menus to add $r=0; diff --git a/htdocs/install/mysql/migration/10.0.0-11.0.0.sql b/htdocs/install/mysql/migration/10.0.0-11.0.0.sql new file mode 100644 index 00000000000..018892d7a2c --- /dev/null +++ b/htdocs/install/mysql/migration/10.0.0-11.0.0.sql @@ -0,0 +1,49 @@ +-- +-- Be carefull to requests order. +-- This file must be loaded by calling /install/index.php page +-- when current version is 11.0.0 or higher. +-- +-- To restrict request to Mysql version x.y minimum use -- VMYSQLx.y +-- To restrict request to Pgsql version x.y minimum use -- VPGSQLx.y +-- To rename a table: ALTER TABLE llx_table RENAME TO llx_table_new; +-- To add a column: ALTER TABLE llx_table ADD COLUMN newcol varchar(60) NOT NULL DEFAULT '0' AFTER existingcol; +-- To rename a column: ALTER TABLE llx_table CHANGE COLUMN oldname newname varchar(60); +-- To drop a column: ALTER TABLE llx_table DROP COLUMN oldname; +-- To change type of field: ALTER TABLE llx_table MODIFY COLUMN name varchar(60); +-- To drop a foreign key: ALTER TABLE llx_table DROP FOREIGN KEY fk_name; +-- To create a unique index ALTER TABLE llx_table ADD UNIQUE INDEX uk_table_field (field); +-- To drop an index: -- VMYSQL4.1 DROP INDEX nomindex on llx_table +-- To drop an index: -- VPGSQL8.2 DROP INDEX nomindex +-- To make pk to be auto increment (mysql): -- VMYSQL4.3 ALTER TABLE llx_table CHANGE COLUMN rowid rowid INTEGER NOT NULL AUTO_INCREMENT; +-- To make pk to be auto increment (postgres): +-- -- VPGSQL8.2 CREATE SEQUENCE llx_table_rowid_seq OWNED BY llx_table.rowid; +-- -- VPGSQL8.2 ALTER TABLE llx_table ADD PRIMARY KEY (rowid); +-- -- VPGSQL8.2 ALTER TABLE llx_table ALTER COLUMN rowid SET DEFAULT nextval('llx_table_rowid_seq'); +-- -- VPGSQL8.2 SELECT setval('llx_table_rowid_seq', MAX(rowid)) FROM llx_table; +-- To set a field as NULL: -- VMYSQL4.3 ALTER TABLE llx_table MODIFY COLUMN name varchar(60) NULL; +-- To set a field as NULL: -- VPGSQL8.2 ALTER TABLE llx_table ALTER COLUMN name DROP NOT NULL; +-- To set a field as NOT NULL: -- VMYSQL4.3 ALTER TABLE llx_table MODIFY COLUMN name varchar(60) NOT NULL; +-- To set a field as NOT NULL: -- VPGSQL8.2 ALTER TABLE llx_table ALTER COLUMN name SET NOT NULL; +-- To set a field as default NULL: -- VPGSQL8.2 ALTER TABLE llx_table ALTER COLUMN name SET DEFAULT NULL; +-- Note: fields with type BLOB/TEXT can't have default value. + +-- Missing in 10.0 + + +-- For 11.0 + +CREATE TABLE llx_intracommreport +( + rowid integer AUTO_INCREMENT PRIMARY KEY, + + ref varchar(30) NOT NULL, -- report reference number + entity integer DEFAULT 1 NOT NULL, -- multi company id + type_declaration varchar(32), + period varchar(32), + mode varchar(32), + content_xml text, + type_export varchar(10), + datec datetime, + tms timestamp +)ENGINE=innodb; + diff --git a/htdocs/install/mysql/migration/9.0.0-10.0.0.sql b/htdocs/install/mysql/migration/9.0.0-10.0.0.sql index 139b8f897c7..83a0b1bb7c6 100644 --- a/htdocs/install/mysql/migration/9.0.0-10.0.0.sql +++ b/htdocs/install/mysql/migration/9.0.0-10.0.0.sql @@ -411,16 +411,3 @@ INSERT INTO llx_c_transport_mode (code, libelle, active) VALUES ('PRO', 'Propuls ALTER TABLE llx_facture ADD COLUMN fk_mode_transport integer after location_incoterms; ALTER TABLE llx_facture_fourn ADD COLUMN fk_mode_transport integer after location_incoterms; - -create table llx_intracommreport -( - rowid integer AUTO_INCREMENT PRIMARY KEY, - - ref varchar(30) NOT NULL, -- report reference number - entity integer DEFAULT 1 NOT NULL, -- multi company id - type_declaration varchar(32), - periode varchar(32), - mode varchar(32), - content_xml text, - exporttype varchar(10) -)ENGINE=innodb; diff --git a/htdocs/install/mysql/tables/llx_intracommreport.sql b/htdocs/install/mysql/tables/llx_intracommreport.sql index e3b27d2de7c..a09396920c7 100644 --- a/htdocs/install/mysql/tables/llx_intracommreport.sql +++ b/htdocs/install/mysql/tables/llx_intracommreport.sql @@ -1,5 +1,6 @@ -- =================================================================== --- Copyright (C) 2019 Open-DSI +-- Copyright (C) 2015 ATM Consulting +-- Copyright (C) 2019 Open-DSI -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by @@ -23,8 +24,10 @@ create table llx_intracommreport ref varchar(30) NOT NULL, -- report reference number entity integer DEFAULT 1 NOT NULL, -- multi company id type_declaration varchar(32), - periode varchar(32), + period varchar(32), mode varchar(32), content_xml text, - exporttype varchar(10) + type_export varchar(10), + datec datetime, + tms timestamp )ENGINE=innodb; diff --git a/htdocs/intracommreport/class/intracommreport.class.php b/htdocs/intracommreport/class/intracommreport.class.php index af8a244deec..66c3bf0d96d 100644 --- a/htdocs/intracommreport/class/intracommreport.class.php +++ b/htdocs/intracommreport/class/intracommreport.class.php @@ -1,5 +1,6 @@ +/* Copyright (C) 2015 ATM Consulting + * Copyright (C) 2019 Open-DSI * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -20,17 +21,48 @@ * \ingroup Intracomm report * \brief File of class to manage intracomm report */ +require_once DOL_DOCUMENT_ROOT.'/core/class/commonobject.class.php'; /** * Class to manage intracomm report */ class IntracommReport extends CommonObject { - + /** + * @var string ID to identify managed object + */ + public $element='intracommreport'; + + /** + * @var string Name of table without prefix where object is stored + */ + public $table_element='intracommreport'; + + /** + * @var int Field with ID of parent key if this field has a parent + */ + public $fk_element='fk_intracommreport'; + + /** + * 0=No test on entity, 1=Test with field entity, 2=Test with link by societe + * + * @var int + */ + public $ismultientitymanaged = 1; + + /** + * DEB - Product + */ + const TYPE_DEB = 0; + /** + * DES - Service + */ + const TYPE_DES = 1; + static $type = array( - 'introduction'=>'Introduction' - ,'expedition'=>'Expédition' - ); + 'introduction'=>'Introduction' + ,'expedition'=>'Expédition' + ); /** * Constructor @@ -52,11 +84,10 @@ class IntracommReport extends CommonObject parent::start(); parent::_init_vars(); */ - + $this->exporttype = 'deb'; } - - + /** * @param $mode O pour création, R pour régénération (apparemment toujours 0 dans la cadre des échanges XML selon la doc) * @param $type introduction ou expedition @@ -64,16 +95,16 @@ class IntracommReport extends CommonObject function getXML($mode='O', $type='introduction', $periode_reference='') { global $db, $conf, $mysoc; - + /**************Construction de quelques variables********************/ $party_id = substr(strtr($mysoc->tva_intra, array(' '=>'')), 0, 4).$mysoc->idprof2; $declarant = substr($mysoc->managers, 0, 14); $id_declaration = self::getNumeroDeclaration($this->numero_declaration); /********************************************************************/ - + /**************Construction du fichier XML***************************/ $e = new SimpleXMLElement(''); - + $enveloppe = $e->addChild('Envelope'); $enveloppe->addChild('envelopeId', $conf->global->INTRACOMMREPORT_NUM_AGREMENT); $date_time = $enveloppe->addChild('DateTime'); @@ -97,69 +128,66 @@ class IntracommReport extends CommonObject $declaration->addChild('flowCode', ($type == 'introduction' ? 'A' : 'D')); $declaration->addChild('currencyCode', $conf->global->MAIN_MONNAIE); /********************************************************************/ - + /**************Ajout des lignes de factures**************************/ $res = self::addItemsFact($declaration, $type, $periode_reference); /********************************************************************/ - + $this->errors = array_unique($this->errors); if(!empty($res)) return $e->asXML(); else return 0; - } // $type_declaration tjrs = "expedition" à voir si ça évolue function getXMLDes($period_year, $period_month, $type_declaration='expedition') { global $db, $conf, $mysoc; - - + $e = new SimpleXMLElement(''); - + $declaration_des = $e->addChild('declaration_des'); $declaration_des->addChild('num_des', self::getNumeroDeclaration($this->numero_declaration)); $declaration_des->addChild('num_tvaFr', $mysoc->tva_intra); // /^FR[a-Z0-9]{2}[0-9]{9}$/ // Doit faire 13 caractères $declaration_des->addChild('mois_des', $period_month); $declaration_des->addChild('an_des', $period_year); - - + /**************Ajout des lignes de factures**************************/ $res = self::addItemsFact($declaration_des, $type_declaration, $period_year.'-'.$period_month, 'des'); /********************************************************************/ - + $this->errors = array_unique($this->errors); if(!empty($res)) return $e->asXML(); else return 0; } - + function addItemsFact(&$declaration, $type, $periode_reference, $exporttype='deb') { - + global $db, $conf; - + require_once DOL_DOCUMENT_ROOT . '/categories/class/categorie.class.php'; - + $sql = $this->getSQLFactLines($type, $periode_reference, $exporttype); - + $resql = $db->query($sql); - + if($resql) { $i=1; - + if(empty($resql->num_rows)) { $this->errors[] = 'Aucune donnée pour cette période'; return 0; } - + if($exporttype == 'deb' && $conf->global->INTRACOMMREPORT_CATEG_FRAISDEPORT > 0) { $categ_fraisdeport = new Categorie($db); $categ_fraisdeport->fetch($conf->global->INTRACOMMREPORT_CATEG_FRAISDEPORT); $TLinesFraisDePort = array(); } - + while($res = $db->fetch_object($resql)) { - + if ($exporttype == 'des') { $this->addItemXMlDes($declaration, $res, '', $i); @@ -175,25 +203,25 @@ class IntracommReport extends CommonObject } else $this->addItemXMl($declaration, $res, '', $i); } } - + $i++; - + } - + if(!empty($TLinesFraisDePort)) $this->addItemFraisDePort($declaration, $TLinesFraisDePort, $type, $categ_fraisdeport, $i); if(count($this->errors) > 0) return 0; - + } - + return 1; - + } function getSQLFactLines($type, $periode_reference, $exporttype='deb') { - + global $mysoc, $conf; - + if($type=='expedition' || $exporttype=='des') { $sql = 'SELECT f.facnumber, f.total as total_ht'; $table = 'facture'; @@ -224,13 +252,13 @@ class IntracommReport extends CommonObject AND f.entity = '.$conf->entity.' AND (s.fk_pays <> '.$mysoc->country_id.' OR s.fk_pays IS NULL) AND f.datef BETWEEN "'.$periode_reference.'-01" AND "'.$periode_reference.'-'.date('t').'"'; - + return $sql; - + } - + function addItemXMl(&$declaration, &$res, $code_douane_spe='', $i) { - + $item = $declaration->addChild('Item'); $item->addChild('ItemNumber', $i); $cn8 = $item->addChild('CN8'); @@ -249,7 +277,7 @@ class IntracommReport extends CommonObject $nature_of_transaction->addChild('natureOfTransactionBCode', 1); $item->addChild('modeOfTransportCode', $res->mode_transport); $item->addChild('regionCode', substr($res->zip, 0, 2)); - + } function addItemXMlDes($declaration, &$res, $code_douane_spe='', $i) @@ -259,14 +287,14 @@ class IntracommReport extends CommonObject $item->addChild('valeur', round($res->total_ht)); // Montant total ht de la facture (entier attendu) $item->addChild('partner_des', $res->tva_intra); // Représente le numéro TVA du client étranger } - + /** * Cette fonction ajoute un item en récupérant le code douane du produit ayant le plus haut montant dans la facture */ function addItemFraisDePort(&$declaration, &$TLinesFraisDePort, $type, &$categ_fraisdeport, $i) { - + global $db, $conf; - + if($type=='expedition') { $table = 'facture'; $tabledet = 'facturedet'; @@ -279,9 +307,9 @@ class IntracommReport extends CommonObject $field_link = 'fk_facture_fourn'; $more_sql = 'f.ref_supplier'; } - + foreach($TLinesFraisDePort as $res) { - + $sql = 'SELECT p.customcode FROM '.MAIN_DB_PREFIX.$tabledet.' d INNER JOIN '.MAIN_DB_PREFIX.$table.' f ON (f.rowid = d.'.$field_link.') @@ -303,43 +331,40 @@ class IntracommReport extends CommonObject WHERE fk_categorie = '.$categ_fraisdeport->id.' ) )'; - + $resql = $db->query($sql); $ress = $db->fetch_object($resql); - + $this->addItemXMl($declaration, $res, $ress->customcode, $i); - + $i++; } - } function getNextNumeroDeclaration() { - + global $db; $resql = $db->query('SELECT MAX(numero_declaration) as max_numero_declaration FROM '.$this->get_table().' WHERE exporttype="'.$this->exporttype.'"'); if($resql) $res = $db->fetch_object($resql); - + return ($res->max_numero_declaration + 1); - } // La doc impose que le numéro soit un entier positif d'un maximum de 6 caractères static function getNumeroDeclaration($numero) { - + return str_pad($numero, 6, 0, STR_PAD_LEFT); - } function generateXMLFile() { - + $name = $this->periode.'.xml'; $fname = sys_get_temp_dir().'/'.$name; $f = fopen($fname, 'w+'); fwrite($f, $this->content_xml); fclose($f); - + header('Content-Description: File Transfer'); header('Content-Type: application/xml'); header('Content-Disposition: attachment; filename="'.$name.'"'); @@ -349,7 +374,6 @@ class IntracommReport extends CommonObject header('Content-Length: ' . filesize($fname)); readfile($fname); exit; - + } - } diff --git a/htdocs/intracommreport/export.php b/htdocs/intracommreport/export.php index 5a61a62a581..4a5e2fc073a 100644 --- a/htdocs/intracommreport/export.php +++ b/htdocs/intracommreport/export.php @@ -31,6 +31,7 @@ $action = GETPOST('action'); $exporttype = GETPOST('exporttype'); // DEB ou DES if (empty($exporttype)) $exporttype = 'deb'; +$form = new Form($db); $formother = new FormOther($db); $year = GETPOST('year'); $month = GETPOST('month'); @@ -58,7 +59,7 @@ switch($action) { function _print_form_deb() { - global $langs, $formother, $year, $month, $type_declaration; + global $langs, $form, $formother, $year, $month, $type, $type_declaration; $title = $langs->trans("IntracommReportDEBTitle"); llxHeader("", $title); @@ -83,7 +84,8 @@ function _print_form_deb() { $TabMonth = array(); for($i=1;$i<=12;$i++) $TabMonth[$i] = $langs->trans('Month'.str_pad($i, 2, 0, STR_PAD_LEFT)); //print $ATMform->combo('','month', $TabMonth, empty($month) ? date('m') : $month); - print $formother->selectyear(empty($year) ? date('Y') : $year,'year',0, 20, 5); + print $formother->select_month(empty($month) ? date('M') : $month,'month',0, 1); + print $formother->select_year(empty($year) ? date('Y') : $year,'year',0, 3, 3); print ''; print ''; print ''; @@ -92,7 +94,8 @@ function _print_form_deb() { print ''; print ''; //print $ATMform->combo('','type', array('introduction'=>'Introduction', 'expedition'=>'Expédition'), $type_declaration); - print ''; + print $form->selectarray('type', $type, $type_declaration); + print ''; print ''; print ''; @@ -120,13 +123,13 @@ function _print_form_des() print ''; print ''; print ''; // Permet d'utiliser le bon select de la requête sql - - print ''; - + + print '
'; + print ''; - + print ''; print ''; print ''; print ''; - + print '
'; print 'Paramètres de l\'export'; print '
Période d\'analyse'; @@ -136,22 +139,21 @@ function _print_form_des() print $formother->selectyear(empty($year) ? date('Y') : $year,'year',0, 20, 5); print '
'; - + print '
'; print ''; print '
'; - + print ''; - } function _export_xml_deb($type_declaration, $period_year, $period_month) { - - global $PDOdb, $conf; - - $obj = new TDebProdouane($PDOdb); + + global $db, $conf; + + $obj = new TDebProdouane($db); $obj->entity = $conf->entity; $obj->mode = 'O'; $obj->periode = $period_year.'-'.$period_month; @@ -163,13 +165,12 @@ function _export_xml_deb($type_declaration, $period_year, $period_month) { $obj->generateXMLFile(); } else setEventMessage($obj->errors, 'warnings'); - } function _export_xml_des($type_declaration, $period_year, $period_month) { - + global $PDOdb, $conf; - + $obj = new TDebProdouane($PDOdb); $obj->entity = $conf->entity; $obj->periode = $period_year.'-'.$period_month; @@ -182,49 +183,6 @@ function _export_xml_des($type_declaration, $period_year, $period_month) { $obj->generateXMLFile(); } else setEventMessage($obj->errors, 'warnings'); - -} - -function _liste($exporttype='deb') { - - global $db, $conf, $PDOdb, $langs; - - $langs->load('intracommreport'); - - llxHeader(); - $l = new TListviewTBS('intracommreport'); - - $sql = 'SELECT numero_declaration, type_declaration, periode, rowid as dl - FROM '.MAIN_DB_PREFIX.'intracommreport - WHERE entity = '.$conf->entity.' AND exporttype = '.$PDOdb->quote($exporttype); - - print $l->render($PDOdb, $sql, array( - 'type'=>array( - //'date_cre'=>'date' - ) - ,'link'=>array( - 'dl'=>''.img_picto('', 'file.png').'' - ) - ,'eval'=>array( - 'numero_declaration'=>'TDebProdouane::getNumeroDeclaration("@val@")' - ,'type_declaration'=>'TDebProdouane::$TType["@val@"]' - ) - ,'liste'=>array( - 'titre'=>$langs->trans('intracommreportList'.$exporttype) - ,'image'=>img_picto('','title.png', '', 0) - ,'picto_precedent'=>img_picto('','back.png', '', 0) - ,'picto_suivant'=>img_picto('','next.png', '', 0) - ,'messageNothing'=>"Il n'y a aucune déclaration à afficher" - ,'picto_search'=>img_picto('','search.png', '', 0) - ) - ,'title'=>array( - 'numero_declaration'=>$langs->trans('intracommreportNumber') - ,'type_declaration'=>$langs->trans('intracommreportTypeDeclaration') - ,'periode'=>$langs->trans('intracommreportPeriod') - ,'dl'=>$langs->trans('intracommreportDownload') - ) - )); - } llxFooter(); diff --git a/htdocs/intracommreport/list.php b/htdocs/intracommreport/list.php new file mode 100644 index 00000000000..d903ef31287 --- /dev/null +++ b/htdocs/intracommreport/list.php @@ -0,0 +1,588 @@ + + * Copyright (C) 2019 Open-DSI + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/** + * \file htdocs/intracommreport/list.php + * \ingroup Intracomm Report + * \brief Page to list intracomm report + */ + +require '../main.inc.php'; +require_once DOL_DOCUMENT_ROOT.'/intracommreport/class/intracommreport.class.php'; +require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php'; +require_once DOL_DOCUMENT_ROOT.'/core/class/html.formother.class.php'; + +// Load translation files required by the page +$langs->loadLangs(array('intracommreport')); + +$action=GETPOST('action', 'alpha'); +$massaction=GETPOST('massaction', 'alpha'); +$show_files=GETPOST('show_files', 'int'); +$confirm=GETPOST('confirm', 'alpha'); +$toselect = GETPOST('toselect', 'array'); + +$sall=trim((GETPOST('search_all', 'alphanohtml')!='')?GETPOST('search_all', 'alphanohtml'):GETPOST('sall', 'alphanohtml')); +$search_ref=GETPOST("search_ref", 'alpha'); +$search_type = GETPOST("search_type", 'int'); +$fourn_id = GETPOST("fourn_id", 'int'); +$catid = GETPOST('catid', 'int'); +$optioncss = GETPOST('optioncss', 'alpha'); +$type=GETPOST("type", "int"); + +$diroutputmassaction=$conf->product->dir_output . '/temp/massgeneration/'.$user->id; + +$limit = GETPOST('limit', 'int')?GETPOST('limit', 'int'):$conf->liste_limit; +$sortfield = GETPOST("sortfield", 'alpha'); +$sortorder = GETPOST("sortorder", 'alpha'); +$page = (GETPOST("page", 'int')?GETPOST("page", 'int'):0); +if (empty($page) || $page == -1) { $page = 0; } // If $page is not defined, or '' or -1 +$offset = $limit * $page; +$pageprev = $page - 1; +$pagenext = $page + 1; +if (! $sortfield) $sortfield="i.ref"; +if (! $sortorder) $sortorder="ASC"; + +// Initialize context for list +$contextpage=GETPOST('contextpage', 'aZ')?GETPOST('contextpage', 'aZ'):'intracommreportlist'; +if ((string) $type == '1') { $contextpage='DESlist'; if ($search_type=='') $search_type='1'; } +if ((string) $type == '0') { $contextpage='DEBlist'; if ($search_type=='') $search_type='0'; } + +// Initialize technical object to manage hooks. Note that conf->hooks_modules contains array of hooks +$object=new IntracommReport($db); +$hookmanager->initHooks(array('intracommreportlist')); +$extrafields = new ExtraFields($db); +$form=new Form($db); + +/* +// fetch optionals attributes and labels +$extralabels = $extrafields->fetch_name_optionals_label('intracommreport'); +$search_array_options=$extrafields->getOptionalsFromPost($object->table_element, '', 'search_'); +*/ + +if (empty($action)) $action='list'; + +// Get object canvas (By default, this is not defined, so standard usage of dolibarr) +$canvas=GETPOST("canvas"); +$objcanvas=null; +if (! empty($canvas)) +{ + require_once DOL_DOCUMENT_ROOT.'/core/class/canvas.class.php'; + $objcanvas = new Canvas($db, $action); + $objcanvas->getCanvas('product', 'list', $canvas); +} + +// Security check +/* +if ($search_type=='0') $result=restrictedArea($user, 'produit', '', '', '', '', '', $objcanvas); +elseif ($search_type=='1') $result=restrictedArea($user, 'service', '', '', '', '', '', $objcanvas); +else $result=restrictedArea($user, 'produit|service', '', '', '', '', '', $objcanvas); +*/ + +// List of fields to search into when doing a "search in all" +$fieldstosearchall = array( + 'i.ref'=>"Ref", + 'pfi.ref_fourn'=>"RefSupplier", + 'i.label'=>"ProductLabel", + 'i.description'=>"Description", + "i.note"=>"Note", +); + +$isInEEC=isInEEC($mysoc); + +// Definition of fields for lists +$arrayfields=array( + 'i.ref'=>array('label'=>$langs->trans("Ref"), 'checked'=>1), + //'pfi.ref_fourn'=>array('label'=>$langs->trans("RefSupplier"), 'checked'=>1, 'enabled'=>(! empty($conf->barcode->enabled))), + 'i.label'=>array('label'=>$langs->trans("Label"), 'checked'=>1), + 'i.fk_product_type'=>array('label'=>$langs->trans("Type"), 'checked'=>0, 'enabled'=>(! empty($conf->produit->enabled) && ! empty($conf->service->enabled))), + 'i.barcode'=>array('label'=>$langs->trans("Gencod"), 'checked'=>1, 'enabled'=>(! empty($conf->barcode->enabled))), + 'i.duration'=>array('label'=>$langs->trans("Duration"), 'checked'=>($contextpage != 'productlist'), 'enabled'=>(! empty($conf->service->enabled))), + 'i.weight'=>array('label'=>$langs->trans("Weight"), 'checked'=>0, 'enabled'=>(! empty($conf->produit->enabled))), +); +/* +// Extra fields +if (is_array($extrafields->attributes[$object->table_element]['label']) && count($extrafields->attributes[$object->table_element]['label'])) +{ + foreach($extrafields->attributes[$object->table_element]['label'] as $key => $val) + { + if (! empty($extrafields->attributes[$object->table_element]['list'][$key])) + $arrayfields["ef.".$key]=array('label'=>$extrafields->attributes[$object->table_element]['label'][$key], 'checked'=>(($extrafields->attributes[$object->table_element]['list'][$key]<0)?0:1), 'position'=>$extrafields->attributes[$object->table_element]['pos'][$key], 'enabled'=>(abs($extrafields->attributes[$object->table_element]['list'][$key])!=3 && $extrafields->attributes[$object->table_element]['perms'][$key])); + } +} +*/ +$object->fields = dol_sort_array($object->fields, 'position'); +$arrayfields = dol_sort_array($arrayfields, 'position'); + + + +/* + * Actions + */ + +if (GETPOST('cancel', 'alpha')) { $action='list'; $massaction=''; } +if (! GETPOST('confirmmassaction', 'alpha') && $massaction != 'presend' && $massaction != 'confirm_presend') { $massaction=''; } + +$parameters=array(); +$reshook=$hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks +if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); + +if (empty($reshook)) +{ + // Selection of new fields + include DOL_DOCUMENT_ROOT.'/core/actions_changeselectedfields.inc.php'; + + // Purge search criteria + if (GETPOST('button_removefilter_x', 'alpha') || GETPOST('button_removefilter.x', 'alpha') || GETPOST('button_removefilter', 'alpha')) // All tests are required to be compatible with all browsers + { + $sall=""; + $search_ref=""; + $search_label=""; + $search_barcode=""; + $search_categ=0; + $search_tosell=""; + $search_tobuy=""; + $search_tobatch=''; + //$search_type=''; // There is 2 types of list: a list of product and a list of services. No list with both. So when we clear search criteria, we must keep the filter on type. + + $show_childproducts = ''; + $search_array_options=array(); + } + + // Mass actions + $objectclass='Product'; + if ((string) $search_type == '1') { $objectlabel='Services'; } + if ((string) $search_type == '0') { $objectlabel='Products'; } + + $permtoread = $user->rights->produit->lire; + $permtodelete = $user->rights->produit->supprimer; + $uploaddir = $conf->product->dir_output; + include DOL_DOCUMENT_ROOT.'/core/actions_massactions.inc.php'; +} + + +/* + * View + */ +$formother=new FormOther($db); + +$title=$langs->trans('IntracommReportList'.$type); + +$sql = 'SELECT DISTINCT i.rowid, i.type_declaration, i.type_export, i.period, i.mode, i.entity'; +/* +// Add fields from extrafields +if (! empty($extrafields->attributes[$object->table_element]['label'])) { + foreach ($extrafields->attributes[$object->table_element]['label'] as $key => $val) $sql.=($extrafields->attributes[$object->table_element]['type'][$key] != 'separate' ? ", ef.".$key.' as options_'.$key : ''); +} +*/ +// Add fields from hooks +$parameters=array(); +$reshook=$hookmanager->executeHooks('printFieldListSelect', $parameters); // Note that $action and $object may have been modified by hook +$sql.=$hookmanager->resPrint; + +$sql.= ' FROM '.MAIN_DB_PREFIX.'intracommreport as i'; + +// if (is_array($extrafields->attributes[$object->table_element]['label']) && count($extrafields->attributes[$object->table_element]['label'])) $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."intracommreport_extrafields as ef on (i.rowid = ef.fk_object)"; + +$sql.= ' WHERE i.entity IN ('.getEntity('intracommreport').')'; + +if ($sall) $sql .= natural_search(array_keys($fieldstosearchall), $sall); +// if the type is not 1, we show all products (type = 0,2,3) +if (dol_strlen($search_type) && $search_type != '-1') +{ + if ($search_type == 1) $sql.= " AND i.type = 1"; + else $sql.= " AND i.type = 0"; +} + +/* +if ($search_ref) $sql .= natural_search('i.ref', $search_ref); +if ($search_label) $sql .= natural_search('i.label', $search_label); +if ($search_barcode) $sql .= natural_search('i.barcode', $search_barcode); +if (isset($search_tosell) && dol_strlen($search_tosell) > 0 && $search_tosell!=-1) $sql.= " AND i.tosell = ".$db->escape($search_tosell); +if (isset($search_tobuy) && dol_strlen($search_tobuy) > 0 && $search_tobuy!=-1) $sql.= " AND i.tobuy = ".$db->escape($search_tobuy); +if (dol_strlen($canvas) > 0) $sql.= " AND i.canvas = '".$db->escape($canvas)."'"; +*/ + +/* +// Add where from extra fields +include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_sql.tpl.php'; +*/ +// Add where from hooks +$parameters=array(); +$reshook=$hookmanager->executeHooks('printFieldListWhere', $parameters); // Note that $action and $object may have been modified by hook +$sql.=$hookmanager->resPrint; + +$sql.= " GROUP BY i.rowid"; + +/* +// Add fields from extrafields +if (! empty($extrafields->attributes[$object->table_element]['label'])) { + foreach ($extrafields->attributes[$object->table_element]['label'] as $key => $val) $sql.=($extrafields->attributes[$object->table_element]['type'][$key] != 'separate' ? ", ef.".$key : ''); +} +*/ + +// Add fields from hooks +$parameters=array(); +$reshook=$hookmanager->executeHooks('printFieldSelect', $parameters); // Note that $action and $object may have been modified by hook +$sql.=$hookmanager->resPrint; + +$sql.= $db->order($sortfield, $sortorder); + +$nbtotalofrecords = ''; +if (empty($conf->global->MAIN_DISABLE_FULL_SCANLIST)) +{ + $result = $db->query($sql); + $nbtotalofrecords = $db->num_rows($result); + if (($page * $limit) > $nbtotalofrecords) // if total resultset is smaller then paging size (filtering), goto and load page 0 + { + $page = 0; + $offset = 0; + } +} + +$sql.= $db->plimit($limit + 1, $offset); + +$resql = $db->query($sql); + +if ($resql) +{ + $num = $db->num_rows($resql); + + $arrayofselected=is_array($toselect)?$toselect:array(); + + $helpurl='EN:Module_IntracommReport|FR:Module_ProDouane'; + llxHeader('', $title, $helpurl, ''); + + // Displays product removal confirmation + if (GETPOST('delprod')) { + setEventMessages($langs->trans("ProductDeleted", GETPOST('delprod')), null, 'mesgs'); + } + + $param=''; + if (! empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) $param.='&contextpage='.urlencode($contextpage); + if ($limit > 0 && $limit != $conf->liste_limit) $param.='&limit='.urlencode($limit); + if ($sall) $param.="&sall=".urlencode($sall); + if ($search_categ > 0) $param.="&search_categ=".urlencode($search_categ); + if ($search_ref) $param="&search_ref=".urlencode($search_ref); + if ($search_ref_supplier) $param="&search_ref_supplier=".urlencode($search_ref_supplier); + if ($search_barcode) $param.=($search_barcode?"&search_barcode=".urlencode($search_barcode):""); + if ($search_label) $param.="&search_label=".urlencode($search_label); + + // Add $param from extra fields + include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_param.tpl.php'; + + // List of mass actions available + $arrayofmassactions = array( + 'generate_doc'=>$langs->trans("ReGeneratePDF"), + //'builddoc'=>$langs->trans("PDFMerge"), + //'presend'=>$langs->trans("SendByMail"), + ); + if ($user->rights->intracommreport->delete) $arrayofmassactions['predelete']="".$langs->trans("Delete"); + if (in_array($massaction, array('presend','predelete'))) $arrayofmassactions=array(); + $massactionbutton=$form->selectMassAction('', $arrayofmassactions); + + $newcardbutton=''; + $rightskey='DEB'; + if($type == IntracommReport::TYPE_DES) $rightskey='DES'; + if($user->rights->{$rightskey}->creer) + { + $label='NewDEB'; + if($type == IntracommReport::TYPE_DES) $label='NewDES'; + $newcardbutton.= dolGetButtonTitle($langs->trans($label), '', 'fa fa-plus-circle', DOL_URL_ROOT.'/intracommreport/card.php?action=create&type='.$type); + } + + print '
'; + if ($optioncss != '') print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + if (empty($arrayfields['i.fk_product_type']['checked'])) print ''; + + print_barre_liste($texte, $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, $massactionbutton, $num, $nbtotalofrecords, 'title_products.png', 0, $newcardbutton, '', $limit); + + $topicmail="Information"; + $modelmail="product"; + $objecttmp=new IntracommReport($db); + $trackid='prod'.$object->id; + include DOL_DOCUMENT_ROOT.'/core/tpl/massactions_pre.tpl.php'; + + if ($sall) + { + foreach($fieldstosearchall as $key => $val) $fieldstosearchall[$key]=$langs->trans($val); + print '
'.$langs->trans("FilterOnInto", $sall) . join(', ', $fieldstosearchall).'
'; + } + + $parameters=array(); + $reshook=$hookmanager->executeHooks('printFieldPreListTitle', $parameters); // Note that $action and $object may have been modified by hook + if (empty($reshook)) $moreforfilter.=$hookmanager->resPrint; + else $moreforfilter=$hookmanager->resPrint; + + if ($moreforfilter) + { + print '
'; + print $moreforfilter; + print '
'; + } + + $varpage=empty($contextpage)?$_SERVER["PHP_SELF"]:$contextpage; + $selectedfields=$form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage); // This also change content of $arrayfields + if ($massactionbutton) $selectedfields.=$form->showCheckAddButtons('checkforselect', 1); + + print '
'; + print ''."\n"; + + // Lines with input filters + print ''; + if (! empty($arrayfields['i.ref']['checked'])) + { + print ''; + } + if (! empty($arrayfields['pfi.ref_fourn']['checked'])) + { + print ''; + } + if (! empty($arrayfields['i.label']['checked'])) + { + print ''; + } + // Type + if (! empty($arrayfields['i.fk_product_type']['checked'])) + { + print ''; + } + // Barcode + if (! empty($arrayfields['i.barcode']['checked'])) + { + print ''; + } + // Duration + if ((string) $type == '1' && ! empty($arrayfields['i.duration']['checked'])) + { + print ''; + } + + // Weight + if (! empty($arrayfields['i.weight']['checked'])) + { + print ''; + } + /* + // Extra fields + include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_input.tpl.php'; + */ + // Fields from hook + $parameters=array('arrayfields'=>$arrayfields); + $reshook=$hookmanager->executeHooks('printFieldListOption', $parameters); // Note that $action and $object may have been modified by hook + print $hookmanager->resPrint; + // Date creation + if (! empty($arrayfields['i.datec']['checked'])) + { + print ''; + } + // Date modification + if (! empty($arrayfields['i.tms']['checked'])) + { + print ''; + } + print ''; + + print ''; + + print ''; + if (! empty($arrayfields['i.ref']['checked'])) { + print_liste_field_titre($arrayfields['i.ref']['label'], $_SERVER["PHP_SELF"], "i.ref", "", $param, "", $sortfield, $sortorder); + } + if (! empty($arrayfields['i.label']['checked'])) { + print_liste_field_titre($arrayfields['i.label']['label'], $_SERVER["PHP_SELF"], "i.label", "", $param, "", $sortfield, $sortorder); + } + if (! empty($arrayfields['i.fk_product_type']['checked'])) { + print_liste_field_titre($arrayfields['i.fk_product_type']['label'], $_SERVER["PHP_SELF"], "i.fk_product_type", "", $param, "", $sortfield, $sortorder); + } + if (! empty($arrayfields['i.barcode']['checked'])) { + print_liste_field_titre($arrayfields['i.barcode']['label'], $_SERVER["PHP_SELF"], "i.barcode", "", $param, "", $sortfield, $sortorder); + } + if ((string) $type == '1' && ! empty($arrayfields['i.duration']['checked'])) { + print_liste_field_titre($arrayfields['i.duration']['label'], $_SERVER["PHP_SELF"], "i.duration", "", $param, '', $sortfield, $sortorder, 'center '); + } + if (! empty($arrayfields['i.weight']['checked'])) print_liste_field_titre($arrayfields['i.weight']['label'], $_SERVER["PHP_SELF"], "i.weight", "", $param, '', $sortfield, $sortorder, 'center '); + + /* + // Extra fields + include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_title.tpl.php'; + */ + // Hook fields + $parameters=array('arrayfields'=>$arrayfields,'param'=>$param,'sortfield'=>$sortfield,'sortorder'=>$sortorder); + $reshook=$hookmanager->executeHooks('printFieldListTitle', $parameters); // Note that $action and $object may have been modified by hook + print $hookmanager->resPrint; + if (! empty($arrayfields['i.datec']['checked'])) { + print_liste_field_titre($arrayfields['i.datec']['label'], $_SERVER["PHP_SELF"], "i.datec", "", $param, '', $sortfield, $sortorder, 'center nowrap '); + } + if (! empty($arrayfields['i.tms']['checked'])) { + print_liste_field_titre($arrayfields['i.tms']['label'], $_SERVER["PHP_SELF"], "i.tms", "", $param, '', $sortfield, $sortorder, 'center nowrap '); + } + + print_liste_field_titre($selectedfields, $_SERVER["PHP_SELF"], "", '', '', '', $sortfield, $sortorder, 'center maxwidthsearch '); + print "\n"; + + + $intracommreport_static = new IntracommReport($db); + + $i = 0; + $totalarray=array(); + while ($i < min($num, $limit)) + { + $obj = $db->fetch_object($resql); + + $intracommreport_static->id = $obj->rowid; + $intracommreport_static->ref = $obj->ref; + $intracommreport_static->ref_fourn = $obj->ref_supplier; + $intracommreport_static->label = $obj->label; + $intracommreport_static->type = $obj->fk_product_type; + $intracommreport_static->status_buy = $obj->tobuy; + $intracommreport_static->status = $obj->tosell; + $intracommreport_static->status_batch = $obj->tobatch; + $intracommreport_static->entity = $obj->entity; + + print ''; + + // Ref + if (! empty($arrayfields['i.ref']['checked'])) + { + print '\n"; + if (! $i) $totalarray['nbfield']++; + } + // Ref supplier + if (! empty($arrayfields['pfi.ref_fourn']['checked'])) + { + print '\n"; + if (! $i) $totalarray['nbfield']++; + } + // Label + if (! empty($arrayfields['i.label']['checked'])) + { + print ''; + if (! $i) $totalarray['nbfield']++; + } + + // Type + if (! empty($arrayfields['i.fk_product_type']['checked'])) + { + print ''; + if (! $i) $totalarray['nbfield']++; + } + + // Barcode + if (! empty($arrayfields['i.barcode']['checked'])) + { + print ''; + if (! $i) $totalarray['nbfield']++; + } + + // Duration + if ((string) $type == '1' && ! empty($arrayfields['i.duration']['checked'])) + { + print ''; + if (! $i) $totalarray['nbfield']++; + } + + // Weight + if (! empty($arrayfields['i.weight']['checked'])) + { + print ''; + if (! $i) $totalarray['nbfield']++; + } + + // Action + print ''; + if (! $i) $totalarray['nbfield']++; + + print "\n"; + $i++; + } + + $db->free($resql); + + print "
'; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + $array=array('-1'=>' ', '0'=>$langs->trans('Product'), '1'=>$langs->trans('Service')); + print $form->selectarray('search_type', $array, $search_type); + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + $searchpicto=$form->showFilterButtons(); + print $searchpicto; + print '
'; + print $intracommreport_static->getNomUrl(1); + print "'; + print $intracommreport_static->getNomUrl(1); + print "'.dol_trunc($obj->label, 80).''.$obj->fk_product_type.''.$obj->barcode.''; + + if (preg_match('/([^a-z]+)[a-z]$/i', $obj->duration)) + { + $duration_value = substr($obj->duration, 0, dol_strlen($obj->duration)-1); + $duration_unit = substr($obj->duration, -1); + + if ((float) $duration_value > 1) + { + $dur=array("i"=>$langs->trans("Minutes"),"h"=>$langs->trans("Hours"),"d"=>$langs->trans("Days"),"w"=>$langs->trans("Weeks"),"m"=>$langs->trans("Months"),"y"=>$langs->trans("Years")); + } + elseif ((float) $duration_value > 0) + { + $dur=array("i"=>$langs->trans("Minute"),"h"=>$langs->trans("Hour"),"d"=>$langs->trans("Day"),"w"=>$langs->trans("Week"),"m"=>$langs->trans("Month"),"y"=>$langs->trans("Year")); + } + print $duration_value; + print (! empty($duration_unit) && isset($dur[$duration_unit]) ? ' '.$langs->trans($dur[$duration_unit]) : ''); + } + else + { + print $obj->duration; + } + + print ''; + print $obj->weight; + print ''; + if ($massactionbutton || $massaction) // If we are in select mode (massactionbutton defined) or if we have already selected and sent an action ($massaction) defined + { + $selected=0; + if (in_array($obj->rowid, $arrayofselected)) $selected=1; + print ''; + } + print '
"; + print "
"; + print '
'; +} +else +{ + dol_print_error($db); +} + +// End of page +llxFooter(); +$db->close(); diff --git a/htdocs/intracommreport/list_det b/htdocs/intracommreport/list_det new file mode 100644 index 00000000000..afd6509f693 --- /dev/null +++ b/htdocs/intracommreport/list_det @@ -0,0 +1,40 @@ +function _liste($exporttype='deb') { + +global $db, $conf, $langs; + +$langs->load('intracommreport'); + +llxHeader(); +$l = new TListviewTBS('intracommreport'); + +$sql = 'SELECT numero_declaration, type_declaration, periode, rowid as dl +FROM '.MAIN_DB_PREFIX.'intracommreport +WHERE entity = '.$conf->entity.' AND exporttype = '.$PDOdb->quote($exporttype); + +print $l->render($PDOdb, $sql, array( +'type'=>array( +//'date_cre'=>'date' +) +,'link'=>array( +'dl'=>''.img_picto('', 'file.png').'' +) +,'eval'=>array( +'numero_declaration'=>'TDebProdouane::getNumeroDeclaration("@val@")' +,'type_declaration'=>'TDebProdouane::$TType["@val@"]' +) +,'liste'=>array( +'titre'=>$langs->trans('IntracommReportList'.$exporttype) +,'image'=>img_picto('','title.png', '', 0) +,'picto_precedent'=>img_picto('','back.png', '', 0) +,'picto_suivant'=>img_picto('','next.png', '', 0) +,'messageNothing'=>"Il n'y a aucune déclaration à afficher" +,'picto_search'=>img_picto('','search.png', '', 0) +) +,'title'=>array( +'numero_declaration'=>$langs->trans('IntracommReportNumber') +,'type_declaration'=>$langs->trans('IntracommReportTypeDeclaration') +,'periode'=>$langs->trans('IntracommReportPeriod') +,'dl'=>$langs->trans('IntracommReportDownload') +) +)); +} \ No newline at end of file diff --git a/htdocs/langs/en_US/admin.lang b/htdocs/langs/en_US/admin.lang index 5fc1994247c..a0cbfc021b3 100644 --- a/htdocs/langs/en_US/admin.lang +++ b/htdocs/langs/en_US/admin.lang @@ -895,6 +895,9 @@ Permission63001=Read resources Permission63002=Create/modify resources Permission63003=Delete resources Permission63004=Link resources to agenda events +Permission68001=Read intracomm report +Permission68002=Create/modify intracomm report +Permission68004=Delete intracomm report DictionaryCompanyType=Third-party types DictionaryCompanyJuridicalType=Third-party legal entities DictionaryProspectLevel=Prospect potential diff --git a/htdocs/langs/en_US/intracommreport.lang b/htdocs/langs/en_US/intracommreport.lang index 8d2b891ed8e..eed5981f4b9 100644 --- a/htdocs/langs/en_US/intracommreport.lang +++ b/htdocs/langs/en_US/intracommreport.lang @@ -14,22 +14,22 @@ INTRACOMMREPORT_CATEG_FRAISDEPORT=Catégorie de services de type "Frais de port" INTRACOMMREPORT_NUM_DECLARATION=Numéro de déclarant #Menu -exportprodebDouane=Export Pro-Douane -exportprodebDEB=Export DEB -exportprodebNew=Nouvelle déclaration -exportprodebList=Liste des déclarations -exportprodebDES=Export DES -exportprodesNew=Nouvelle déclaration -exportprodesList=Liste des déclarations +MenuDeclaration=Export Pro-Douane +MenuDeclarationDEB=Export DEB +MenuDeclarationDEBNew=Nouvelle déclaration +MenuDeclarationDEBList=Liste des déclarations +MenuDeclarationDES=Export DES +MenuDeclarationDESNew=Nouvelle déclaration +MenuDeclarationDESList=Liste des déclarations #page d'export -exportprodebTitle=Export d'un fichier XML au format ProDouane - DEB -exportprodesTitle=Export d'un fichier XML au format ProDouane - DES +IntracommReportDEBTitle=Export d'un fichier XML au format ProDouane - DEB +IntracommReportDESTitle=Export d'un fichier XML au format ProDouane - DES #Liste -exportprodebListdeb=Liste des déclarations générées (DEB) -exportprodebListdes=Liste des déclarations générées (DES) -exportprodebNumber=Numéro déclaration -exportprodebPeriod=Période d'analyse -exportprodebTypeDeclaration=Type de déclaration -exportprodebDownload=Télécharger fichier XML \ No newline at end of file +IntracommReportListDEB=Liste des déclarations générées (DEB) +IntracommReportListDES=Liste des déclarations générées (DES) +IntracommReportNumber=Numéro déclaration +IntracommReportPeriod=Période d'analyse +IntracommReportTypeDeclaration=Type de déclaration +IntracommReportDownload=Télécharger fichier XML \ No newline at end of file