[RESOLU] Contact Livraison

Bonjour à tous,

Sur module Propal
J’essaie d’insérer les information du contact de livraison dans le PDF généré (azur).
Pour cela je cherche l’index de la table MySQL doli_propal correspondante au contact de livraison configuré dans la Propal.
Je vois bien tout le reste de la configuration de la propal dans cette table doli_propal mais rien de ce qui est configuré dans l’onglet Contacts/Adresse ci-dessous :

ContactsPropal.jpg

Avez-vous l’information ?

Bon du coup je pense que je vais utiliser le code « SHIPPING » du dictionnaire n’ayant pas trouver une autre solution et ne comprenant pas les extrafields.
Je vois que le template pdf azur fait déjà appel au code « SALESREPFOLL » pour le nom du commercial.

J’ai modifier le code à partir de la condition if ($showaddress) que voici :

		if ($showaddress)
		{
			
			// Add shipping var
			$arrayidship=$object->getIdContact('external','SHIPPING');
			$arraysocnship=$object->getSocName('external','SHIPPING');
			$arraysocaship=$object->getSocAdd('external','SHIPPING');
			
			// Sender properties
			$carac_emetteur='';
		 	// Add internal contact of proposal if defined
			$arrayidcontact=$object->getIdContact('internal','SALESREPFOLL');
		 	if (count($arrayidcontact) > 0)
		 	{
		 		$object->fetch_user($arrayidcontact[0]);
		 		$labelbeforecontactname=($outputlangs->transnoentities("FromContactName")!='FromContactName'?$outputlangs->transnoentities("FromContactName"):$outputlangs->transnoentities("Name"));
		 		$carac_emetteur .= ($carac_emetteur ? "\n" : '' ).$labelbeforecontactname." ".$outputlangs->convToOutputCharset($object->user->getFullName($outputlangs))."\n";
		 	}

		 	$carac_emetteur .= pdf_build_address($outputlangs, $this->emetteur, $object->thirdparty, '', 0, 'source', $object);

			// Width box sender and shipping & Left Margin text box
			if (! empty($arrayidship)){ 
			$widthrecbox = 62;
			$margbox = 1
			} 
			Else { 
			$widthrecbox = 82;
			$margbox = 2;
			}
			

			// Show sender
			$posy=42+$top_shift;
		 	$posx=$this->marge_gauche;
			if (! empty($conf->global->MAIN_INVERT_SENDER_RECIPIENT)) $posx=$this->page_largeur-$this->(marge_droite-$widthrecbox);
			$hautcadre=40;

			// Show sender frame
			$pdf->SetTextColor(128,128,128);
			$pdf->SetFillColor(230,230,230);
			$pdf->SetFont('','', $default_font_size - 1);
			$pdf->SetXY($margbox,$posy-5);
			$pdf->MultiCell($widthrecbox,5, $outputlangs->transnoentities("BillFrom")." :", 0, 'L');
			$pdf->SetXY($posx,$posy);
			//$pdf->MultiCell($widthrecbox, $hautcadre, "", 0, 'R');
			$pdf->RoundedRect($posx, $posy, $widthrecbox, $hautcadre, 2, '1234', 'F');
			
			// Show sender name
			$pdf->SetXY($margbox,$posy+3);
			$pdf->SetTextColor(0,0,60);
			$pdf->SetFont('','B', $default_font_size + 2);
			$pdf->MultiCell($widthrecbox, 4, $outputlangs->convToOutputCharset($this->emetteur->name), 0, 'L');
			$posy=$pdf->getY();

			// Show sender information
			$pdf->SetXY($margbox,$posy);
			$pdf->SetFont('','', $default_font_size - 1);
			$pdf->MultiCell($widthrecbox, 4, $carac_emetteur, 0, 'L');
			


			// Add shipping
			if (! empty($arrayidship))
			{
			// Show shipping
			$posy=42+$top_shift;
			$posx=$this->marge_gauche+$widthrecbox+2;
			$hautcadre=40;
			
			// Show shipping frame
			$pdf->SetTextColor(255,255,0);
			$pdf->SetFillColor(255,255,0);
			$pdf->SetFont('','', $default_font_size - 2);
			$pdf->SetXY($margbox,$posy-5);
			$pdf->MultiCell($widthrecbox,5, "Adresse de livraison :", 0, 'L');
			$pdf->SetXY($posx,$posy);
			//$pdf->MultiCell($widthrecbox, $hautcadre, "", 0, 'R');
			$pdf->RoundedRect($posx, $posy, $widthrecboxrecipient, $hautcadre, 2, '1234');
			
			// Show shipping name
			$pdf->SetXY($margbox,$posy+3);
			$pdf->SetFont('','B', $default_font_size);
			$pdf->MultiCell($widthrecbox, 4, $arraysocnship, 0, 'L');
			$posy=$pdf->getY();
			
			// Show shipping information
			$pdf->SetXY($margbox,$posy);
			$pdf->SetFont('','', $default_font_size - 1);
			$pdf->MultiCell($widthrecbox, 4, $arraysocaship, 0, 'L');
			}


			// If CUSTOMER contact defined, we use it
			$usecontact=false;
			$arrayidcontact=$object->getIdContact('external','CUSTOMER');
			if (count($arrayidcontact) > 0)
			{
				$usecontact=true;
				$result=$object->fetch_contact($arrayidcontact[0]);
			}

			//Recipient name
			// On peut utiliser le nom de la societe du contact
			if ($usecontact && !empty($conf->global->MAIN_USE_COMPANY_NAME_OF_CONTACT)) {
				$thirdparty = $object->contact;
			} else {
				$thirdparty = $object->thirdparty;
			}

			$carac_client_name= pdfBuildThirdpartyName($thirdparty, $outputlangs);

			$carac_client=pdf_build_address($outputlangs,$this->emetteur,$object->thirdparty,($usecontact?$object->contact:''),$usecontact,'target',$object);

			// Show recipient
			if (! empty($arrayidship)){ $widthrecboxrecipient=62; 
			} else { $widthrecboxrecipient=100; }
			$posy=42+$top_shift;
			$posx=$this->page_largeur-$this->marge_droite-$widthrecboxrecipient;
			if (! empty($conf->global->MAIN_INVERT_SENDER_RECIPIENT)) $posx=$this->marge_gauche;

			// Show recipient frame
			$pdf->SetTextColor(0,255,0);
			$pdf->SetFillColor(0,255,0);
			$pdf->SetFont('','', $default_font_size - 1);
			$pdf->SetXY($margbox,$posy-5);
			$pdf->MultiCell($widthrecboxrecipient, 5, $outputlangs->transnoentities("BillTo")." :", 0, 'L');
			$pdf->RoundedRect($posx, $posy, $widthrecboxrecipient, $hautcadre, 2, '1234');
			
			// Show recipient name
			$pdf->SetXY($margbox,$posy+3);
			$pdf->SetFont('','B', $default_font_size + 2);
			$pdf->MultiCell($widthrecboxrecipient, 4, $carac_client_name, 0, 'L');
			$posy = $pdf->getY();

			// Show recipient information
			$pdf->SetFont('','', $default_font_size - 1);
			$pdf->SetXY($margbox,$posy);
			$pdf->MultiCell($widthrecboxrecipient, 4, $carac_client, 0, 'L');
					}

		$pdf->SetTextColor(0,0,0);
		return $top_shift;
	}

Mais cela ne fonctionne pas… Le PDF ne se génère pas.
J’ai du faire une erreur sur l’ajout des variables suivantes :

			// Add shipping var
			$arrayidship=$object->getIdContact('external','SHIPPING');
			$arraysocnship=$object->getSocName('external','SHIPPING');
			$arraysocaship=$object->getSocAdd('external','SHIPPING');

J’ai finalement réussi à trouver.

Slt
Si du coup tu peux partager la soluce ca servira surement a d autres…

C’est bien plus compliqué que ca peut paraitre.

Mais voici quelque piste :

Déjà on ajoute les variable suivantes :

			// Add shipping var
			$array_shipiing_idcontact=$object->getIdContact('external','SHIPPING');

			$useshipcontact=false;
			if (count($array_shipiing_idcontact) > 0)
			{
				$useshipcontact=true;
				$result=$object->fetch_contact($array_shipiing_idcontact[0]);
			}

			// Shipping name
			// Use company name of contact
			if ($useshipcontact && !empty($conf->global->MAIN_USE_COMPANY_NAME_OF_CONTACT)) {
				$thirdparty = $object->contact;
			} else {
				$thirdparty = $object->thirdparty;
			}

			$carac_ship_name= pdfBuildThirdpartyName($thirdparty, $outputlangs);
			$carac_ship= pdf_build_address($outputlangs,$this->emetteur,$object->thirdparty,($useshipcontact?$object->contact:''),$useshipcontact,'target',$object);

Ensuite on utilise les variables $carac_ship_name && $carac_ship

			// Add shipping
			if ($useshipcontact)
			{
			
				// Show shipping name
				$pdf-\>MultiCell($posx, 4, $carac_ship_name, 0, 'L');
				
				// Show shipping information
				$pdf-\>MultiCell($posx, 4, $carac_ship, 0, 'L');
			}

Je passe sur la position et taille des cellules qui est à paramétrer en fonction de ses besoins et de là où on souhaite placer l’adresse de livraison

Il est important de ne pas modifier le fichier de génération de PDF d’origine mais plutôt d’en créer un nouveau (pour les futur MAJ de Dolibarr).

Bonsoir,

Joli travail.

Vous savez que des modules externes font le même job instantanément ?

Cordialement,
Sylvain Legrand.

Bonjour,

En effet, j’ai vu votre module et ai hésité à la prendre.
Mais vraiment impératif pour moi d’avoir la main sur la génération des PDF. J’ai effectué plusieurs modifications esthétiques et fonctionnelles et ai corrigé quelques erreurs.
Les autres choses à la limite pourquoi pas, mais les PDF sont tout de même les documents qui seront présentés au client. L’image de l’entreprise est tout de suite mis en avant.

Même si le temps manque énormément lors d’une création d’entreprise et n’étant pas développeur, j’aime chercher, me torturer la tête.
Et quid à chaque MAJ ? Le plugin sera t il compatible ? Sera t il maintenu ? Y a t il un support ?

Aussi, je compte proposer l’installation de cette solution dans mes prestations de services informatique.
Donc autant comprendre comment il fonctionne.
Je m’engage aussi à verser un don à chaque installation de solution OpenSource effectuée. :wink:

D’ailleurs je modifie actuellement le fichier de génération de PDF de la fiche produit pour y intégrer l’image du produit. Je cherche, je cherche…
J’ai aussi retiré tout le code qui a été copié « à l’arrache » du modèle propale ou commande… et qui générait des variables pour rien.
Je le mettrai à disposition une fois trouvé. :wink:

1 « J'aime »