28require_once DOL_DOCUMENT_ROOT.
'/core/class/commonobject.class.php';
39 public $element =
'intracommreport';
44 public $table_element =
'intracommreport';
49 public $fk_element =
'fk_intracommreport';
54 public $picto =
'intracommreport';
57 const STATUS_DRAFT = 0;
58 const STATUS_VALIDATED = 1;
59 const STATUS_CANCELED = 9;
106 public $fields = array(
107 "rowid" => array(
"type" =>
"integer",
"label" =>
"TechnicalID",
"enabled" => 1,
'position' => 10,
'notnull' => 1,
"visible" =>
"0",),
108 "ref" => array(
"type" =>
"varchar(30)",
"label" =>
"Ref",
"enabled" => 1,
'position' => 15,
'notnull' => 1,
"visible" => 1,
"csslist" =>
"tdoverflowmax150",
"showoncombobox" => 1,),
109 "type_declaration" => array(
"type" =>
"varchar(32)",
"label" =>
"TypeOfDeclaration",
"enabled" => 1,
'position' => 25,
'notnull' => 0,
"visible" => 1,
'arrayofkeyval' => array(
"deb" =>
"DEB",
"des" =>
"DES")),
110 "periods" => array(
"type" =>
"varchar(32)",
"label" =>
"Periods",
"enabled" => 1,
'position' => 30,
'notnull' => 0,
"visible" => -1,),
111 "mode" => array(
"type" =>
"varchar(32)",
"label" =>
"Mode",
"enabled" => 1,
'position' => 35,
'notnull' => 0,
"visible" => -1,),
112 "content_xml" => array(
"type" =>
"text",
"label" =>
"Contentxml",
"enabled" => 1,
'position' => 40,
'notnull' => 0,
"visible" => -1,),
113 "type_export" => array(
"type" =>
"varchar(10)",
"label" =>
"TypeOfExport",
"enabled" => 1,
'position' => 45,
'notnull' => 0,
"visible" => -1,
'arrayofkeyval' => array(
"in" =>
"Input",
"out" =>
"Output")),
114 "datec" => array(
"type" =>
"datetime",
"label" =>
"DateCreation",
"enabled" => 1,
'position' => 50,
'notnull' => 0,
"visible" => -1,),
115 "tms" => array(
"type" =>
"timestamp",
"label" =>
"DateModification",
"enabled" => 1,
'position' => 55,
'notnull' => 1,
"visible" => -1,),
128 public $type_declaration;
174 public $declaration_number;
179 public $numero_declaration;
203 $this->ismultientitymanaged = 1;
204 $this->isextrafieldmanaged = 1;
207 if (!
getDolGlobalInt(
'MAIN_SHOW_TECHNICAL_ID') && isset($this->fields[
'rowid']) && !empty($this->fields[
'ref'])) {
208 $this->fields[
'rowid'][
'visible'] = 0;
210 if (!isModEnabled(
'multicompany') && isset($this->fields[
'entity'])) {
211 $this->fields[
'entity'][
'enabled'] = 0;
221 foreach ($this->fields as $key => $val) {
222 if (isset($val[
'enabled']) && empty($val[
'enabled'])) {
223 unset($this->fields[$key]);
228 if (is_object($langs)) {
229 foreach ($this->fields as $key => $val) {
230 if (!empty($val[
'arrayofkeyval']) && is_array($val[
'arrayofkeyval'])) {
231 foreach ($val[
'arrayofkeyval'] as $key2 => $val2) {
232 $this->fields[$key][
'arrayofkeyval'][$key2] = $langs->trans($val2);
238 $this->type_export =
'deb';
248 public function create($user, $notrigger = 0)
254 return $resultcreate;
266 public function fetch($id, $ref =
null, $noextrafields = 0, $nolines = 0)
268 $result = $this->
fetchCommon($id, $ref,
'', $noextrafields);
269 if ($result > 0 && !empty($this->table_element_line) && empty($nolines)) {
270 $this->fetchLines($noextrafields);
282 public function delete($user, $notrigger = 0)
296 public function getXML($mode =
'O', $type =
'introduction', $period_reference =
'')
298 global
$conf, $mysoc;
301 $party_id = substr(strtr($mysoc->tva_intra, array(
' ' =>
'')), 0, 4).$mysoc->idprof2;
302 $declarant = substr($mysoc->managers, 0, 14);
307 $e =
new SimpleXMLElement(
'<?xml version="1.0" encoding="utf-8" standalone="yes"?><INSTAT></INSTAT>');
309 $envelope = $e->addChild(
'Envelope');
310 $envelope->addChild(
'envelopeId',
$conf->global->INTRACOMMREPORT_NUM_AGREMENT);
311 $date_time = $envelope->addChild(
'DateTime');
312 $date_time->addChild(
'date', date(
'Y-m-d'));
313 $date_time->addChild(
'time', date(
'H:i:s'));
314 $party = $envelope->addChild(
'Party');
315 $party->addAttribute(
'partyType',
$conf->global->INTRACOMMREPORT_TYPE_ACTEUR);
316 $party->addAttribute(
'partyRole',
$conf->global->INTRACOMMREPORT_ROLE_ACTEUR);
317 $party->addChild(
'partyId', $party_id);
318 $party->addChild(
'partyName', $declarant);
319 $envelope->addChild(
'softwareUsed',
'Dolibarr');
320 $declaration = $envelope->addChild(
'Declaration');
321 $declaration->addChild(
'declarationId', $id_declaration);
322 $declaration->addChild(
'referencePeriod', $period_reference);
328 $declaration->addChild(
'PSIId', $psiId);
329 $function = $declaration->addChild(
'Function');
330 $functionCode = $function->addChild(
'functionCode', $mode);
331 $declaration->addChild(
'declarationTypeCode',
getDolGlobalString(
'INTRACOMMREPORT_NIV_OBLIGATION_'.strtoupper($type)));
332 $declaration->addChild(
'flowCode', ($type ==
'introduction' ?
'A' :
'D'));
333 $declaration->addChild(
'currencyCode',
$conf->global->MAIN_MONNAIE);
337 $res = $this->
addItemsFact($declaration, $type, $period_reference);
340 $this->errors = array_unique($this->errors);
357 public function getXMLDes($period_year, $period_month, $type_declaration =
'expedition')
361 $e =
new SimpleXMLElement(
'<?xml version="1.0" encoding="utf-8" ?><fichier_des></fichier_des>');
363 $declaration_des = $e->addChild(
'declaration_des');
364 $declaration_des->addChild(
'num_des', self::getDeclarationNumber($this->numero_declaration));
365 $declaration_des->addChild(
'num_tvaFr', $mysoc->tva_intra);
366 $declaration_des->addChild(
'mois_des', (
string) $period_month);
367 $declaration_des->addChild(
'an_des', (
string) $period_year);
370 $res = $this->
addItemsFact($declaration_des, $type_declaration, $period_year.
'-'.$period_month,
'des');
372 $this->errors = array_unique($this->errors);
390 public function addItemsFact(&$declaration, $type, $period_reference, $exporttype =
'deb')
392 require_once DOL_DOCUMENT_ROOT.
'/categories/class/categorie.class.php';
396 $resql = $this->db->query($sql);
401 if ($this->db->num_rows($resql) <= 0) {
402 $this->errors[] =
'No data for this period';
406 $categ_fraisdeport =
null;
407 if ($exporttype ==
'deb' &&
getDolGlobalInt(
'INTRACOMMREPORT_CATEG_FRAISDEPORT') > 0) {
408 $categ_fraisdeport =
new Categorie($this->db);
410 $TLinesFraisDePort = array();
413 while ($res = $this->db->fetch_object($resql)) {
414 if ($exporttype ==
'des') {
417 if (empty($res->fk_pays)) {
419 $this->errors[] =
'Country not filled in for the third party <a href="'.dol_buildpath(
'/societe/soc.php', 1).
'?socid='.$res->id_client.
'">'.$res->nom.
'</a>';
421 if (
getDolGlobalInt(
'INTRACOMMREPORT_CATEG_FRAISDEPORT') > 0 && $categ_fraisdeport->containsObject(
'product', $res->id_prod)) {
422 $TLinesFraisDePort[] = $res;
424 $this->
addItemXMl($declaration, $res, $i,
'');
432 if (!empty($TLinesFraisDePort)) {
433 $this->
addItemFraisDePort($declaration, $TLinesFraisDePort, $type, $categ_fraisdeport, $i);
436 if (count($this->errors) > 0) {
454 global $mysoc,
$conf;
456 if ($type ==
'expedition' || $exporttype ==
'des') {
457 $sql =
"SELECT f.ref as refinvoice, f.total_ht";
459 $table_extraf =
'facture_extrafields';
460 $tabledet =
'facturedet';
461 $field_link =
'fk_facture';
463 $sql =
"SELECT f.ref_supplier as refinvoice, f.total_ht";
464 $table =
'facture_fourn';
465 $table_extraf =
'facture_fourn_extrafields';
466 $tabledet =
'facture_fourn_det';
467 $field_link =
'fk_facture_fourn';
469 $sql .=
", l.fk_product, l.qty
470 , p.weight, p.rowid as id_prod, p.customcode
471 , s.rowid as id_client, s.nom, s.zip, s.fk_pays, s.tva_intra
474 FROM ".MAIN_DB_PREFIX.$tabledet.
" l
475 INNER JOIN ".MAIN_DB_PREFIX.$table.
" f ON (f.rowid = l.".$this->db->escape($field_link).
")
476 LEFT JOIN ".MAIN_DB_PREFIX.$table_extraf.
" ext ON (ext.fk_object = f.rowid)
477 INNER JOIN ".MAIN_DB_PREFIX.
"product p ON (p.rowid = l.fk_product)
478 INNER JOIN ".MAIN_DB_PREFIX.
"societe s ON (s.rowid = f.fk_soc)
479 LEFT JOIN ".MAIN_DB_PREFIX.
"c_country c ON (c.rowid = s.fk_pays)
480 WHERE f.fk_statut > 0
481 AND l.product_type = ".($exporttype ==
"des" ? 1 : 0).
"
482 AND f.entity = ".((
int)
$conf->entity).
"
483 AND (s.fk_pays <> ".((
int) $mysoc->country_id).
" OR s.fk_pays IS NULL)
484 AND f.datef BETWEEN '".$this->db->escape($period_reference).
"-01' AND '".$this->db->escape($period_reference).
"-".date(
't').
"'";
498 public function addItemXMl(&$declaration, &$res, $i, $code_douane_spe =
'')
500 $item = $declaration->addChild(
'Item');
501 $item->addChild(
'itemNumber', (
string) $i);
502 $cn8 = $item->addChild(
'CN8');
503 if (empty($code_douane_spe)) {
504 $code_douane = $res->customcode;
506 $code_douane = $code_douane_spe;
508 $cn8->addChild(
'CN8Code', $code_douane);
509 $item->addChild(
'MSConsDestCode', $res->code);
510 $item->addChild(
'countryOfOriginCode', substr($res->zip, 0, 2));
511 $item->addChild(
'netMass', (
string) round($res->weight * $res->qty));
512 $item->addChild(
'quantityInSU', (
string) $res->qty);
513 $item->addChild(
'invoicedAmount', (
string) round($res->total_ht));
515 if (!empty($res->tva_intra)) {
516 $item->addChild(
'partnerId', $res->tva_intra);
518 $item->addChild(
'statisticalProcedureCode',
'11');
519 $nature_of_transaction = $item->addChild(
'NatureOfTransaction');
520 $nature_of_transaction->addChild(
'natureOfTransactionACode',
'1');
521 $nature_of_transaction->addChild(
'natureOfTransactionBCode',
'1');
522 $item->addChild(
'modeOfTransportCode', $res->mode_transport);
523 $item->addChild(
'regionCode', substr($res->zip, 0, 2));
536 $item = $declaration->addChild(
'ligne_des');
537 $item->addChild(
'numlin_des', (
string) $i);
538 $item->addChild(
'valeur', (
string) round($res->total_ht));
539 $item->addChild(
'partner_des', $res->tva_intra);
552 public function addItemFraisDePort(&$declaration, &$TLinesFraisDePort, $type, &$categ_fraisdeport, $i)
556 if ($type ==
'expedition') {
558 $tabledet =
'facturedet';
559 $field_link =
'fk_facture';
562 $table =
'facture_fourn';
563 $tabledet =
'facture_fourn_det';
564 $field_link =
'fk_facture_fourn';
565 $more_sql =
'f.ref_supplier';
568 foreach ($TLinesFraisDePort as $res) {
569 $sql =
"SELECT p.customcode
570 FROM ".MAIN_DB_PREFIX.$tabledet.
" d
571 INNER JOIN ".MAIN_DB_PREFIX.$table.
" f ON (f.rowid = d.".$this->db->escape($field_link).
")
572 INNER JOIN ".MAIN_DB_PREFIX.
"product p ON (p.rowid = d.fk_product)
573 WHERE d.fk_product IS NOT NULL
574 AND f.entity = ".((int)
$conf->entity).
"
575 AND ".$more_sql.
" = '".$this->db->escape($res->refinvoice).
"'
578 SELECT MAX(d.total_ht)
579 FROM ".MAIN_DB_PREFIX.$tabledet.
" d
580 INNER JOIN ".MAIN_DB_PREFIX.$table.
" f ON (f.rowid = d.".$this->db->escape($field_link).
")
581 WHERE d.fk_product IS NOT NULL
582 AND ".$more_sql.
" = '".$this->db->escape($res->refinvoice).
"'
583 AND d.fk_product NOT IN
586 FROM ".MAIN_DB_PREFIX.
"categorie_product
587 WHERE fk_categorie = ".((int) $categ_fraisdeport->id).
"
591 $resql = $this->db->query($sql);
592 $ress = $this->db->fetch_object($resql);
594 $this->
addItemXMl($declaration, $res, $i, $ress->customcode);
607 $sql =
"SELECT MAX(numero_declaration) as max_declaration_number";
608 $sql .=
" FROM ".MAIN_DB_PREFIX.$this->table_element;
609 $sql .=
" WHERE exporttype = '".$this->db->escape($this->type_export).
"'";
610 $resql = $this->db->query($sql);
613 $res = $this->db->fetch_object($resql);
616 return (
string) ($res !==
null ? ($res->max_declaration_number + 1) :
'');
627 return str_pad($number, 6,
'0', STR_PAD_LEFT);
638 $name = $this->period.
'.xml';
641 $fname = sys_get_temp_dir().
'/'.$name;
643 $f = fopen($fname,
'w+');
644 fwrite($f, $content_xml);
647 header(
'Content-Description: File Transfer');
648 header(
'Content-Type: application/xml');
649 header(
'Content-Disposition: attachment; filename="'.$name.
'"');
650 header(
'Expires: 0');
651 header(
'Cache-Control: must-revalidate');
652 header(
'Pragma: public');
653 header(
'Content-Length: '.filesize($fname));
670 public function getNomUrl($withpicto = 0, $option =
'', $notooltip = 0, $morecss =
'', $save_lastsearch_value = -1)
672 global
$conf, $langs, $hookmanager;
674 if (!empty(
$conf->dol_no_mouse_hover)) {
681 'objecttype' => $this->element.($this->module ?
'@'.$this->module :
''),
684 $classfortooltip =
'classfortooltip';
687 $classfortooltip =
'classforajaxtooltip';
688 $dataparams =
' data-params="'.dol_escape_htmltag(json_encode($params)).
'"';
694 $url =
dol_buildpath(
'/intracommreport/card.php', 1).
'?id='.$this->id;
696 if ($option !==
'nolink') {
698 $add_save_lastsearch_values = ($save_lastsearch_value == 1 ? 1 : 0);
699 if ($save_lastsearch_value == -1 && isset($_SERVER[
"PHP_SELF"]) && preg_match(
'/list\.php/', $_SERVER[
"PHP_SELF"])) {
700 $add_save_lastsearch_values = 1;
702 if ($url && $add_save_lastsearch_values) {
703 $url .=
'&save_lastsearch_values=1';
708 if (empty($notooltip)) {
710 $label = $langs->trans(
"ShowMyObject");
711 $linkclose .=
' alt="'.dol_escape_htmltag($label, 1).
'"';
713 $linkclose .= ($label ?
' title="'.dol_escape_htmltag($label, 1).
'"' :
' title="tocomplete"');
714 $linkclose .= $dataparams.
' class="'.$classfortooltip.($morecss ?
' '.$morecss :
'').
'"';
716 $linkclose = ($morecss ?
' class="'.$morecss.
'"' :
'');
719 if ($option ==
'nolink' || empty($url)) {
720 $linkstart =
'<span';
722 $linkstart =
'<a href="'.$url.
'"';
724 $linkstart .= $linkclose.
'>';
725 if ($option ==
'nolink' || empty($url)) {
726 $linkend =
'</span>';
731 $result .= $linkstart;
733 if (empty($this->showphoto_on_popup)) {
735 $result .=
img_object(($notooltip ?
'' : $label), ($this->picto ? $this->picto :
'generic'), (($withpicto != 2) ?
'class="paddingright"' :
''), 0, 0, $notooltip ? 0 : 1);
739 require_once DOL_DOCUMENT_ROOT.
'/core/lib/files.lib.php';
741 list($class, $module) = explode(
'@', $this->picto);
744 $filename = $filearray[0][
'name'];
745 if (!empty($filename)) {
746 $pospoint = strpos($filearray[0][
'name'],
'.');
748 $pathtophoto = $class.
'/'.$this->
ref.
'/thumbs/'.substr($filename, 0, $pospoint).
'_mini'.substr($filename, $pospoint);
750 $result .=
'<div class="floatleft inline-block valignmiddle divphotoref"><div class="photoref"><img class="photo'.$module.
'" alt="No photo" border="0" src="'.DOL_URL_ROOT.
'/viewimage.php?modulepart='.$module.
'&entity='.
$conf->entity.
'&file='.urlencode($pathtophoto).
'"></div></div>';
752 $result .=
'<div class="floatleft inline-block valignmiddle divphotoref"><img class="photouserphoto userphoto" alt="No photo" border="0" src="'.DOL_URL_ROOT.
'/viewimage.php?modulepart='.$module.
'&entity='.
$conf->entity.
'&file='.urlencode($pathtophoto).
'"></div>';
757 $result .=
img_object(($notooltip ?
'' : $label), ($this->picto ? $this->picto :
'generic'), ($notooltip ? (($withpicto != 2) ?
'class="paddingright"' :
'') :
'class="'.(($withpicto != 2) ?
'paddingright ' :
'').
'"'), 0, 0, $notooltip ? 0 : 1);
762 if ($withpicto != 2) {
763 $result .= $this->ref;
769 global $action, $hookmanager;
770 $hookmanager->initHooks(array($this->element.
'dao'));
771 $parameters = array(
'id' => $this->
id,
'getnomurl' => &$result);
772 $reshook = $hookmanager->executeHooks(
'getNomUrl', $parameters, $this, $action);
774 $result = $hookmanager->resPrint;
776 $result .= $hookmanager->resPrint;
791 $selected = (empty($arraydata[
'selected']) ? 0 : $arraydata[
'selected']);
793 $return =
'<div class="box-flex-item box-flex-grow-zero">';
794 $return .=
'<div class="info-box info-box-sm">';
795 $return .=
'<span class="info-box-icon bg-infobox-action">';
797 $return .=
'</span>';
798 $return .=
'<div class="info-box-content">';
799 $return .=
'<span class="info-box-ref inline-block tdoverflowmax150 valignmiddle">'.(method_exists($this,
'getNomUrl') ? $this->
getNomUrl() : $this->ref).
'</span>';
800 if ($selected >= 0) {
801 $return .=
'<input id="cb'.$this->id.
'" class="flat checkforselect fright" type="checkbox" name="toselect[]" value="'.$this->
id.
'"'.($selected ?
' checked="checked"' :
'').
'>';
803 if (property_exists($this,
'label')) {
804 $return .=
' <div class="inline-block opacitymedium valignmiddle tdoverflowmax100">'.$this->label.
'</div>';
806 if (property_exists($this,
'thirdparty') && is_object($this->thirdparty)) {
807 $return .=
'<br><div class="info-box-ref tdoverflowmax150">'.$this->thirdparty->getNomUrl(1).
'</div>';
809 if (method_exists($this,
'getLibStatut')) {
810 $return .=
'<br><div class="info-box-status">'.$this->getLibStatut(3).
'</div>';
Class to manage categories.
Parent class of all other business classes (invoices, contracts, proposals, orders,...
createCommon(User $user, $notrigger=0)
Create object in the database.
fetchCommon($id, $ref=null, $morewhere='', $noextrafields=0)
Load object in memory from the database.
deleteCommon(User $user, $notrigger=0, $forcechilddeletion=0)
Delete object in database.
getTooltipContentArray($params)
Return array of data to show into a tooltip.
Class to manage Dolibarr database access.
Class to manage intracomm report.
static getDeclarationNumber($number)
Verify declaration number.
addItemsFact(&$declaration, $type, $period_reference, $exporttype='deb')
Add line from invoice.
getNomUrl($withpicto=0, $option='', $notooltip=0, $morecss='', $save_lastsearch_value=-1)
Return a link to the object card (with optionally the picto)
const TYPE_DEB
DEB - Product.
const TYPE_DES
DES - Service.
__construct(DoliDB $db)
Constructor.
fetch($id, $ref=null, $noextrafields=0, $nolines=0)
Function fetch.
addItemXMl(&$declaration, &$res, $i, $code_douane_spe='')
Add item for DEB.
getXML($mode='O', $type='introduction', $period_reference='')
Generate XML file.
addItemXMlDes($declaration, &$res, $i)
Add item for DES.
getKanbanView($option='', $arraydata=null)
Return a thumb for kanban views.
addItemFraisDePort(&$declaration, &$TLinesFraisDePort, $type, &$categ_fraisdeport, $i)
This function adds an item by retrieving the customs code of the product with the highest amount in t...
getNextDeclarationNumber()
Return next reference of declaration not already used (or last reference)
getSQLFactLines($type, $period_reference, $exporttype='deb')
Add invoice line.
generateXMLFile($content_xml)
Generate XML file.
create($user, $notrigger=0)
Function create.
getXMLDes($period_year, $period_month, $type_declaration='expedition')
Generate XMLDes file.
dol_dir_list($utf8_path, $types="all", $recursive=0, $filter="", $excludefilter=null, $sortcriteria="name", $sortorder=SORT_ASC, $mode=0, $nohook=0, $relativename="", $donotfollowsymlinks=0, $nbsecondsold=0)
Scan a directory and return a list of files/directories.
img_object($titlealt, $picto, $moreatt='', $pictoisfullpath=0, $srconly=0, $notitle=0)
Show a picto called object_picto (generic function)
img_picto($titlealt, $picto, $moreatt='', $pictoisfullpath=0, $srconly=0, $notitle=0, $alt='', $morecss='', $marginleftonlyshort=2)
Show picto whatever it's its name (generic function)
getDolGlobalInt($key, $default=0)
Return a Dolibarr global constant int value.
dol_buildpath($path, $type=0, $returnemptyifnotfound=0)
Return path of url or filesystem.
dol_sanitizeFileName($str, $newstr='_', $unaccent=1)
Clean a string to use it as a file name.
getDolGlobalString($key, $default='')
Return a Dolibarr global constant string value.
global $conf
The following vars must be defined: $type2label $form $conf, $lang, The following vars may also be de...