diff --git a/htdocs/comm/list.php b/htdocs/comm/list.php index ad6bb5dafecf16660d7d0d5ae26eedec42ab0b03..f95173df5d3ef13af5febdfc41bb70ff166295a5 100755 --- a/htdocs/comm/list.php +++ b/htdocs/comm/list.php @@ -79,7 +79,7 @@ if (GETPOST("button_removefilter_x")) * view */ -$htmlother=new FormOther($db); +$formother=new FormOther($db); $thirdpartystatic=new Societe($db); $help_url='EN:Module_Third_Parties|FR:Module_Tiers|ES:Empresas'; @@ -157,14 +157,14 @@ if ($result) if ($conf->categorie->enabled) { $moreforfilter.=$langs->trans('Categories'). ': '; - $moreforfilter.=$htmlother->select_categories(2,$search_categ,'search_categ'); + $moreforfilter.=$formother->select_categories(2,$search_categ,'search_categ'); $moreforfilter.=' '; } // If the user can view prospects other than his' if ($user->rights->societe->client->voir || $socid) { $moreforfilter.=$langs->trans('SalesRepresentatives'). ': '; - $moreforfilter.=$htmlother->select_salesrepresentatives($search_sale,'search_sale',$user); + $moreforfilter.=$formother->select_salesrepresentatives($search_sale,'search_sale',$user); } if ($moreforfilter) { diff --git a/htdocs/comm/propal.php b/htdocs/comm/propal.php index 3fdf2e22d1232c36e677a46b711689781d9f1ced..96ff21c09f0cbd9716eaa4130d4f6d354537569b 100644 --- a/htdocs/comm/propal.php +++ b/htdocs/comm/propal.php @@ -1123,968 +1123,718 @@ $companystatic=new Societe($db); $now=dol_now(); -if ($id > 0 || ! empty($ref)) -{ - /* - * Show object in view mode - */ - - dol_htmloutput_mesg($mesg,$mesgs); +/* + * Show object in view mode + */ - $soc = new Societe($db); - $soc->fetch($object->socid); +dol_htmloutput_mesg($mesg,$mesgs); - $head = propal_prepare_head($object); - dol_fiche_head($head, 'comm', $langs->trans('Proposal'), 0, 'propal'); +$soc = new Societe($db); +$soc->fetch($object->socid); - $formconfirm=''; +$head = propal_prepare_head($object); +dol_fiche_head($head, 'comm', $langs->trans('Proposal'), 0, 'propal'); - // Clone confirmation - if ($action == 'clone') - { - // Create an array for form - $formquestion=array( - //'text' => $langs->trans("ConfirmClone"), - //array('type' => 'checkbox', 'name' => 'clone_content', 'label' => $langs->trans("CloneMainAttributes"), 'value' => 1), - //array('type' => 'checkbox', 'name' => 'update_prices', 'label' => $langs->trans("PuttingPricesUpToDate"), 'value' => 1), - array('type' => 'other', 'name' => 'socid', 'label' => $langs->trans("SelectThirdParty"), 'value' => $form->select_company(GETPOST('socid','int'),'socid','(s.client=1 OR s.client=2 OR s.client=3)')) - ); - // Paiement incomplet. On demande si motif = escompte ou autre - $formconfirm=$form->formconfirm($_SERVER["PHP_SELF"].'?id='.$object->id,$langs->trans('ClonePropal'),$langs->trans('ConfirmClonePropal',$object->ref),'confirm_clone',$formquestion,'yes',1); - } +$formconfirm=''; - // Confirm delete - else if ($action == 'delete') - { - $formconfirm=$form->formconfirm($_SERVER["PHP_SELF"].'?id='.$object->id, $langs->trans('DeleteProp'), $langs->trans('ConfirmDeleteProp',$object->ref), 'confirm_delete','',0,1); - } +// Clone confirmation +if ($action == 'clone') +{ + // Create an array for form + $formquestion=array( + //'text' => $langs->trans("ConfirmClone"), + //array('type' => 'checkbox', 'name' => 'clone_content', 'label' => $langs->trans("CloneMainAttributes"), 'value' => 1), + //array('type' => 'checkbox', 'name' => 'update_prices', 'label' => $langs->trans("PuttingPricesUpToDate"), 'value' => 1), + array('type' => 'other', 'name' => 'socid', 'label' => $langs->trans("SelectThirdParty"), 'value' => $form->select_company(GETPOST('socid','int'),'socid','(s.client=1 OR s.client=2 OR s.client=3)')) + ); + // Paiement incomplet. On demande si motif = escompte ou autre + $formconfirm=$form->formconfirm($_SERVER["PHP_SELF"].'?id='.$object->id,$langs->trans('ClonePropal'),$langs->trans('ConfirmClonePropal',$object->ref),'confirm_clone',$formquestion,'yes',1); +} - // Confirm reopen - else if ($action == 'reopen') - { - $formconfirm=$form->formconfirm($_SERVER["PHP_SELF"].'?id='.$object->id, $langs->trans('ReOpen'), $langs->trans('ConfirmReOpenProp',$object->ref), 'confirm_reopen','',0,1); - } +// Confirm delete +else if ($action == 'delete') +{ + $formconfirm=$form->formconfirm($_SERVER["PHP_SELF"].'?id='.$object->id, $langs->trans('DeleteProp'), $langs->trans('ConfirmDeleteProp',$object->ref), 'confirm_delete','',0,1); +} - // Confirmation delete product/service line - else if ($action == 'ask_deleteline') - { - $formconfirm=$form->formconfirm($_SERVER["PHP_SELF"].'?id='.$object->id.'&lineid='.$lineid, $langs->trans('DeleteProductLine'), $langs->trans('ConfirmDeleteProductLine'), 'confirm_deleteline','',0,1); - } +// Confirm reopen +else if ($action == 'reopen') +{ + $formconfirm=$form->formconfirm($_SERVER["PHP_SELF"].'?id='.$object->id, $langs->trans('ReOpen'), $langs->trans('ConfirmReOpenProp',$object->ref), 'confirm_reopen','',0,1); +} - // Confirm validate proposal - else if ($action == 'validate') - { - $error=0; +// Confirmation delete product/service line +else if ($action == 'ask_deleteline') +{ + $formconfirm=$form->formconfirm($_SERVER["PHP_SELF"].'?id='.$object->id.'&lineid='.$lineid, $langs->trans('DeleteProductLine'), $langs->trans('ConfirmDeleteProductLine'), 'confirm_deleteline','',0,1); +} - // on verifie si l'objet est en numerotation provisoire - $ref = substr($object->ref, 1, 4); - if ($ref == 'PROV') - { - $numref = $object->getNextNumRef($soc); - if (empty($numref)) - { - $error++; - dol_htmloutput_errors($object->error); - } - } - else - { - $numref = $object->ref; - } +// Confirm validate proposal +else if ($action == 'validate') +{ + $error=0; - $text=$langs->trans('ConfirmValidateProp',$numref); - if ($conf->notification->enabled) + // on verifie si l'objet est en numerotation provisoire + $ref = substr($object->ref, 1, 4); + if ($ref == 'PROV') + { + $numref = $object->getNextNumRef($soc); + if (empty($numref)) { - require_once(DOL_DOCUMENT_ROOT ."/core/class/notify.class.php"); - $notify=new Notify($db); - $text.='<br>'; - $text.=$notify->confirmMessage('NOTIFY_VAL_PROPAL',$object->socid); + $error++; + dol_htmloutput_errors($object->error); } - - if (! $error) $formconfirm=$form->formconfirm($_SERVER["PHP_SELF"].'?id='.$object->id, $langs->trans('ValidateProp'), $text, 'confirm_validate','',0,1); } - - if (! $formconfirm) + else { - $parameters=array('lineid'=>$lineid); - $formconfirm=$hookmanager->executeHooks('formConfirm',$parameters,$object,$action); // Note that $action and $object may have been modified by hook + $numref = $object->ref; } - // Print form confirm - print $formconfirm; + $text=$langs->trans('ConfirmValidateProp',$numref); + if ($conf->notification->enabled) + { + require_once(DOL_DOCUMENT_ROOT ."/core/class/notify.class.php"); + $notify=new Notify($db); + $text.='<br>'; + $text.=$notify->confirmMessage('NOTIFY_VAL_PROPAL',$object->socid); + } + if (! $error) $formconfirm=$form->formconfirm($_SERVER["PHP_SELF"].'?id='.$object->id, $langs->trans('ValidateProp'), $text, 'confirm_validate','',0,1); +} - print '<table class="border" width="100%">'; +if (! $formconfirm) +{ + $parameters=array('lineid'=>$lineid); + $formconfirm=$hookmanager->executeHooks('formConfirm',$parameters,$object,$action); // Note that $action and $object may have been modified by hook +} - $linkback="<a href=\"propal.php?page=$page&socid=$socid&viewstatut=$viewstatut&sortfield=$sortfield&$sortorder\">".$langs->trans("BackToList")."</a>"; +// Print form confirm +print $formconfirm; - // Ref - print '<tr><td>'.$langs->trans('Ref').'</td><td colspan="5">'; - print $form->showrefnav($object,'ref',$linkback,1,'ref','ref',''); - print '</td></tr>'; - // Ref client - print '<tr><td>'; - print '<table class="nobordernopadding" width="100%"><tr><td nowrap="nowrap">'; - print $langs->trans('RefCustomer').'</td><td align="left">'; - print '</td>'; - if ($action != 'refclient' && $object->brouillon) print '<td align="right"><a href="'.$_SERVER['PHP_SELF'].'?action=refclient&id='.$object->id.'">'.img_edit($langs->trans('Modify')).'</a></td>'; - print '</tr></table>'; - print '</td><td colspan="5">'; - if ($user->rights->propale->creer && $action == 'refclient') - { - print '<form action="propal.php?id='.$object->id.'" method="post">'; - print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">'; - print '<input type="hidden" name="action" value="set_ref_client">'; - print '<input type="text" class="flat" size="20" name="ref_client" value="'.$object->ref_client.'">'; - print ' <input type="submit" class="button" value="'.$langs->trans('Modify').'">'; - print '</form>'; - } - else - { - print $object->ref_client; - } - print '</td>'; - print '</tr>'; +print '<table class="border" width="100%">'; - // Company - print '<tr><td>'.$langs->trans('Company').'</td><td colspan="5">'.$soc->getNomUrl(1).'</td>'; - print '</tr>'; +$linkback='<a href="'.DOL_URL_ROOT.'/comm/propal/list.php?page='.$page.'&socid='.$socid.'&viewstatut='.$viewstatut.'&sortfield='.$sortfield.'&sortorder='.$sortorder.'">'.$langs->trans("BackToList").'</a>'; - // Ligne info remises tiers - print '<tr><td>'.$langs->trans('Discounts').'</td><td colspan="5">'; - if ($soc->remise_client) print $langs->trans("CompanyHasRelativeDiscount",$soc->remise_client); - else print $langs->trans("CompanyHasNoRelativeDiscount"); - print '. '; - $absolute_discount=$soc->getAvailableDiscounts('','fk_facture_source IS NULL'); - $absolute_creditnote=$soc->getAvailableDiscounts('','fk_facture_source IS NOT NULL'); - $absolute_discount=price2num($absolute_discount,'MT'); - $absolute_creditnote=price2num($absolute_creditnote,'MT'); - if ($absolute_discount) - { - if ($object->statut > 0) - { - print $langs->trans("CompanyHasAbsoluteDiscount",price($absolute_discount),$langs->transnoentities("Currency".$conf->currency)); - } - else - { - // Remise dispo de type non avoir - $filter='fk_facture_source IS NULL'; - print '<br>'; - $form->form_remise_dispo($_SERVER["PHP_SELF"].'?id='.$object->id,0,'remise_id',$soc->id,$absolute_discount,$filter); - } - } - if ($absolute_creditnote) - { - print $langs->trans("CompanyHasCreditNote",price($absolute_creditnote),$langs->transnoentities("Currency".$conf->currency)).'. '; - } - if (! $absolute_discount && ! $absolute_creditnote) print $langs->trans("CompanyHasNoAbsoluteDiscount").'.'; - print '</td></tr>'; +// Ref +print '<tr><td>'.$langs->trans('Ref').'</td><td colspan="5">'; +print $form->showrefnav($object,'ref',$linkback,1,'ref','ref',''); +print '</td></tr>'; - // Date of proposal - print '<tr>'; - print '<td>'; - print '<table class="nobordernopadding" width="100%"><tr><td>'; - print $langs->trans('Date'); - print '</td>'; - if ($action != 'editdate' && $object->brouillon) print '<td align="right"><a href="'.$_SERVER["PHP_SELF"].'?action=editdate&id='.$object->id.'">'.img_edit($langs->trans('SetDate'),1).'</a></td>'; - print '</tr></table>'; - print '</td><td colspan="3">'; - if ($object->brouillon && $action == 'editdate') +// Ref client +print '<tr><td>'; +print '<table class="nobordernopadding" width="100%"><tr><td nowrap="nowrap">'; +print $langs->trans('RefCustomer').'</td><td align="left">'; +print '</td>'; +if ($action != 'refclient' && $object->brouillon) print '<td align="right"><a href="'.$_SERVER['PHP_SELF'].'?action=refclient&id='.$object->id.'">'.img_edit($langs->trans('Modify')).'</a></td>'; +print '</tr></table>'; +print '</td><td colspan="5">'; +if ($user->rights->propale->creer && $action == 'refclient') +{ + print '<form action="propal.php?id='.$object->id.'" method="post">'; + print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">'; + print '<input type="hidden" name="action" value="set_ref_client">'; + print '<input type="text" class="flat" size="20" name="ref_client" value="'.$object->ref_client.'">'; + print ' <input type="submit" class="button" value="'.$langs->trans('Modify').'">'; + print '</form>'; +} +else +{ + print $object->ref_client; +} +print '</td>'; +print '</tr>'; + +// Company +print '<tr><td>'.$langs->trans('Company').'</td><td colspan="5">'.$soc->getNomUrl(1).'</td>'; +print '</tr>'; + +// Ligne info remises tiers +print '<tr><td>'.$langs->trans('Discounts').'</td><td colspan="5">'; +if ($soc->remise_client) print $langs->trans("CompanyHasRelativeDiscount",$soc->remise_client); +else print $langs->trans("CompanyHasNoRelativeDiscount"); +print '. '; +$absolute_discount=$soc->getAvailableDiscounts('','fk_facture_source IS NULL'); +$absolute_creditnote=$soc->getAvailableDiscounts('','fk_facture_source IS NOT NULL'); +$absolute_discount=price2num($absolute_discount,'MT'); +$absolute_creditnote=price2num($absolute_creditnote,'MT'); +if ($absolute_discount) +{ + if ($object->statut > 0) { - print '<form name="editdate" action="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'" method="post">'; - print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">'; - print '<input type="hidden" name="action" value="setdate">'; - $form->select_date($object->date,'re','','',0,"editdate"); - print '<input type="submit" class="button" value="'.$langs->trans('Modify').'">'; - print '</form>'; + print $langs->trans("CompanyHasAbsoluteDiscount",price($absolute_discount),$langs->transnoentities("Currency".$conf->currency)); } else { - if ($object->date) - { - print dol_print_date($object->date,'daytext'); - } - else - { - print ' '; - } + // Remise dispo de type non avoir + $filter='fk_facture_source IS NULL'; + print '<br>'; + $form->form_remise_dispo($_SERVER["PHP_SELF"].'?id='.$object->id,0,'remise_id',$soc->id,$absolute_discount,$filter); } - print '</td>'; - - // Date end proposal - print '<tr>'; - print '<td>'; - print '<table class="nobordernopadding" width="100%"><tr><td>'; - print $langs->trans('DateEndPropal'); - print '</td>'; - if ($action != 'editecheance' && $object->brouillon) print '<td align="right"><a href="'.$_SERVER["PHP_SELF"].'?action=editecheance&id='.$object->id.'">'.img_edit($langs->trans('SetConditions'),1).'</a></td>'; - print '</tr></table>'; - print '</td><td colspan="3">'; - if ($object->brouillon && $action == 'editecheance') +} +if ($absolute_creditnote) +{ + print $langs->trans("CompanyHasCreditNote",price($absolute_creditnote),$langs->transnoentities("Currency".$conf->currency)).'. '; +} +if (! $absolute_discount && ! $absolute_creditnote) print $langs->trans("CompanyHasNoAbsoluteDiscount").'.'; +print '</td></tr>'; + +// Date of proposal +print '<tr>'; +print '<td>'; +print '<table class="nobordernopadding" width="100%"><tr><td>'; +print $langs->trans('Date'); +print '</td>'; +if ($action != 'editdate' && $object->brouillon) print '<td align="right"><a href="'.$_SERVER["PHP_SELF"].'?action=editdate&id='.$object->id.'">'.img_edit($langs->trans('SetDate'),1).'</a></td>'; +print '</tr></table>'; +print '</td><td colspan="3">'; +if ($object->brouillon && $action == 'editdate') +{ + print '<form name="editdate" action="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'" method="post">'; + print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">'; + print '<input type="hidden" name="action" value="setdate">'; + $form->select_date($object->date,'re','','',0,"editdate"); + print '<input type="submit" class="button" value="'.$langs->trans('Modify').'">'; + print '</form>'; +} +else +{ + if ($object->date) { - print '<form name="editecheance" action="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'" method="post">'; - print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">'; - print '<input type="hidden" name="action" value="setecheance">'; - $form->select_date($object->fin_validite,'ech','','','',"editecheance"); - print '<input type="submit" class="button" value="'.$langs->trans('Modify').'">'; - print '</form>'; + print dol_print_date($object->date,'daytext'); } else { - if ($object->fin_validite) - { - print dol_print_date($object->fin_validite,'daytext'); - if ($object->statut == 1 && $object->fin_validite < ($now - $conf->propal->cloture->warning_delay)) print img_warning($langs->trans("Late")); - } - else - { - print ' '; - } + print ' '; } - print '</td>'; - print '</tr>'; - - // Payment term - print '<tr><td>'; - print '<table class="nobordernopadding" width="100%"><tr><td>'; - print $langs->trans('PaymentConditionsShort'); - print '</td>'; - if ($action != 'editconditions' && $object->brouillon) print '<td align="right"><a href="'.$_SERVER["PHP_SELF"].'?action=editconditions&id='.$object->id.'">'.img_edit($langs->transnoentitiesnoconv('SetConditions'),1).'</a></td>'; - print '</tr></table>'; - print '</td><td colspan="3">'; - if ($action == 'editconditions') - { - $form->form_conditions_reglement($_SERVER['PHP_SELF'].'?id='.$object->id,$object->cond_reglement_id,'cond_reglement_id'); - } - else - { - $form->form_conditions_reglement($_SERVER['PHP_SELF'].'?id='.$object->id,$object->cond_reglement_id,'none'); - } - print '</td>'; - print '</tr>'; - - // Delivery date - $langs->load('deliveries'); - print '<tr><td>'; - print '<table class="nobordernopadding" width="100%"><tr><td>'; - print $langs->trans('DeliveryDate'); - print '</td>'; - if ($action != 'editdate_livraison' && $object->brouillon) print '<td align="right"><a href="'.$_SERVER["PHP_SELF"].'?action=editdate_livraison&id='.$object->id.'">'.img_edit($langs->transnoentitiesnoconv('SetDeliveryDate'),1).'</a></td>'; - print '</tr></table>'; - print '</td><td colspan="3">'; - if ($action == 'editdate_livraison') +} +print '</td>'; + +// Date end proposal +print '<tr>'; +print '<td>'; +print '<table class="nobordernopadding" width="100%"><tr><td>'; +print $langs->trans('DateEndPropal'); +print '</td>'; +if ($action != 'editecheance' && $object->brouillon) print '<td align="right"><a href="'.$_SERVER["PHP_SELF"].'?action=editecheance&id='.$object->id.'">'.img_edit($langs->trans('SetConditions'),1).'</a></td>'; +print '</tr></table>'; +print '</td><td colspan="3">'; +if ($object->brouillon && $action == 'editecheance') +{ + print '<form name="editecheance" action="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'" method="post">'; + print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">'; + print '<input type="hidden" name="action" value="setecheance">'; + $form->select_date($object->fin_validite,'ech','','','',"editecheance"); + print '<input type="submit" class="button" value="'.$langs->trans('Modify').'">'; + print '</form>'; +} +else +{ + if ($object->fin_validite) { - print '<form name="editdate_livraison" action="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'" method="post">'; - print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">'; - print '<input type="hidden" name="action" value="setdate_livraison">'; - $form->select_date($object->date_livraison,'liv_','','','',"editdate_livraison"); - print '<input type="submit" class="button" value="'.$langs->trans('Modify').'">'; - print '</form>'; + print dol_print_date($object->fin_validite,'daytext'); + if ($object->statut == 1 && $object->fin_validite < ($now - $conf->propal->cloture->warning_delay)) print img_warning($langs->trans("Late")); } else { - print dol_print_date($object->date_livraison,'daytext'); + print ' '; } - print '</td>'; - print '</tr>'; +} +print '</td>'; +print '</tr>'; + +// Payment term +print '<tr><td>'; +print '<table class="nobordernopadding" width="100%"><tr><td>'; +print $langs->trans('PaymentConditionsShort'); +print '</td>'; +if ($action != 'editconditions' && $object->brouillon) print '<td align="right"><a href="'.$_SERVER["PHP_SELF"].'?action=editconditions&id='.$object->id.'">'.img_edit($langs->transnoentitiesnoconv('SetConditions'),1).'</a></td>'; +print '</tr></table>'; +print '</td><td colspan="3">'; +if ($action == 'editconditions') +{ + $form->form_conditions_reglement($_SERVER['PHP_SELF'].'?id='.$object->id,$object->cond_reglement_id,'cond_reglement_id'); +} +else +{ + $form->form_conditions_reglement($_SERVER['PHP_SELF'].'?id='.$object->id,$object->cond_reglement_id,'none'); +} +print '</td>'; +print '</tr>'; + +// Delivery date +$langs->load('deliveries'); +print '<tr><td>'; +print '<table class="nobordernopadding" width="100%"><tr><td>'; +print $langs->trans('DeliveryDate'); +print '</td>'; +if ($action != 'editdate_livraison' && $object->brouillon) print '<td align="right"><a href="'.$_SERVER["PHP_SELF"].'?action=editdate_livraison&id='.$object->id.'">'.img_edit($langs->transnoentitiesnoconv('SetDeliveryDate'),1).'</a></td>'; +print '</tr></table>'; +print '</td><td colspan="3">'; +if ($action == 'editdate_livraison') +{ + print '<form name="editdate_livraison" action="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'" method="post">'; + print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">'; + print '<input type="hidden" name="action" value="setdate_livraison">'; + $form->select_date($object->date_livraison,'liv_','','','',"editdate_livraison"); + print '<input type="submit" class="button" value="'.$langs->trans('Modify').'">'; + print '</form>'; +} +else +{ + print dol_print_date($object->date_livraison,'daytext'); +} +print '</td>'; +print '</tr>'; + +// Delivery delay +print '<tr><td>'; +print '<table class="nobordernopadding" width="100%"><tr><td>'; +print $langs->trans('AvailabilityPeriod'); +if ($conf->commande->enabled) print ' ('.$langs->trans('AfterOrder').')'; +print '</td>'; +if ($action != 'editavailability' && $object->brouillon) print '<td align="right"><a href="'.$_SERVER["PHP_SELF"].'?action=editavailability&id='.$object->id.'">'.img_edit($langs->transnoentitiesnoconv('SetAvailability'),1).'</a></td>'; +print '</tr></table>'; +print '</td><td colspan="3">'; +if ($action == 'editavailability') +{ + $form->form_availability($_SERVER['PHP_SELF'].'?id='.$object->id,$object->availability_id,'availability_id',1); +} +else +{ + $form->form_availability($_SERVER['PHP_SELF'].'?id='.$object->id,$object->availability_id,'none',1); +} - // Delivery delay - print '<tr><td>'; - print '<table class="nobordernopadding" width="100%"><tr><td>'; - print $langs->trans('AvailabilityPeriod'); - if ($conf->commande->enabled) print ' ('.$langs->trans('AfterOrder').')'; - print '</td>'; - if ($action != 'editavailability' && $object->brouillon) print '<td align="right"><a href="'.$_SERVER["PHP_SELF"].'?action=editavailability&id='.$object->id.'">'.img_edit($langs->transnoentitiesnoconv('SetAvailability'),1).'</a></td>'; - print '</tr></table>'; - print '</td><td colspan="3">'; - if ($action == 'editavailability') - { - $form->form_availability($_SERVER['PHP_SELF'].'?id='.$object->id,$object->availability_id,'availability_id',1); - } - else - { - $form->form_availability($_SERVER['PHP_SELF'].'?id='.$object->id,$object->availability_id,'none',1); - } +print '</td>'; +print '</tr>'; + +// Origin of demand +print '<tr><td>'; +print '<table class="nobordernopadding" width="100%"><tr><td>'; +print $langs->trans('Source'); +print '</td>'; +if ($action != 'editdemandreason' && $object->brouillon) print '<td align="right"><a href="'.$_SERVER["PHP_SELF"].'?action=editdemandreason&id='.$object->id.'">'.img_edit($langs->transnoentitiesnoconv('SetDemandReason'),1).'</a></td>'; +print '</tr></table>'; +print '</td><td colspan="3">'; +//print $object->demand_reason_id; +if ($action == 'editdemandreason') +{ + $form->form_demand_reason($_SERVER['PHP_SELF'].'?id='.$object->id,$object->demand_reason_id,'demand_reason_id',1); +} +else +{ + $form->form_demand_reason($_SERVER['PHP_SELF'].'?id='.$object->id,$object->demand_reason_id,'none'); +} - print '</td>'; - print '</tr>'; +print '</td>'; +print '</tr>'; + +// Payment mode +print '<tr>'; +print '<td width="25%">'; +print '<table class="nobordernopadding" width="100%"><tr><td>'; +print $langs->trans('PaymentMode'); +print '</td>'; +if ($action != 'editmode' && $object->brouillon) print '<td align="right"><a href="'.$_SERVER["PHP_SELF"].'?action=editmode&id='.$object->id.'">'.img_edit($langs->transnoentitiesnoconv('SetMode'),1).'</a></td>'; +print '</tr></table>'; +print '</td><td colspan="3">'; +if ($action == 'editmode') +{ + $form->form_modes_reglement($_SERVER['PHP_SELF'].'?id='.$object->id,$object->mode_reglement_id,'mode_reglement_id'); +} +else +{ + $form->form_modes_reglement($_SERVER['PHP_SELF'].'?id='.$object->id,$object->mode_reglement_id,'none'); +} +print '</td></tr>'; - // Origin of demand +// Project +if ($conf->projet->enabled) +{ + $langs->load("projects"); print '<tr><td>'; print '<table class="nobordernopadding" width="100%"><tr><td>'; - print $langs->trans('Source'); - print '</td>'; - if ($action != 'editdemandreason' && $object->brouillon) print '<td align="right"><a href="'.$_SERVER["PHP_SELF"].'?action=editdemandreason&id='.$object->id.'">'.img_edit($langs->transnoentitiesnoconv('SetDemandReason'),1).'</a></td>'; - print '</tr></table>'; - print '</td><td colspan="3">'; - //print $object->demand_reason_id; - if ($action == 'editdemandreason') + print $langs->trans('Project').'</td>'; + if ($user->rights->propale->creer) { - $form->form_demand_reason($_SERVER['PHP_SELF'].'?id='.$object->id,$object->demand_reason_id,'demand_reason_id',1); - } - else - { - $form->form_demand_reason($_SERVER['PHP_SELF'].'?id='.$object->id,$object->demand_reason_id,'none'); - } - - print '</td>'; - print '</tr>'; - - // Payment mode - print '<tr>'; - print '<td width="25%">'; - print '<table class="nobordernopadding" width="100%"><tr><td>'; - print $langs->trans('PaymentMode'); - print '</td>'; - if ($action != 'editmode' && $object->brouillon) print '<td align="right"><a href="'.$_SERVER["PHP_SELF"].'?action=editmode&id='.$object->id.'">'.img_edit($langs->transnoentitiesnoconv('SetMode'),1).'</a></td>'; - print '</tr></table>'; - print '</td><td colspan="3">'; - if ($action == 'editmode') - { - $form->form_modes_reglement($_SERVER['PHP_SELF'].'?id='.$object->id,$object->mode_reglement_id,'mode_reglement_id'); - } - else - { - $form->form_modes_reglement($_SERVER['PHP_SELF'].'?id='.$object->id,$object->mode_reglement_id,'none'); - } - print '</td></tr>'; - - // Project - if ($conf->projet->enabled) - { - $langs->load("projects"); - print '<tr><td>'; - print '<table class="nobordernopadding" width="100%"><tr><td>'; - print $langs->trans('Project').'</td>'; - if ($user->rights->propale->creer) + if ($action != 'classify') print '<td align="right"><a href="'.$_SERVER['PHP_SELF'].'?action=classify&id='.$object->id.'">'.img_edit($langs->transnoentitiesnoconv('SetProject')).'</a></td>'; + print '</tr></table>'; + print '</td><td colspan="3">'; + if ($action == 'classify') { - if ($action != 'classify') print '<td align="right"><a href="'.$_SERVER['PHP_SELF'].'?action=classify&id='.$object->id.'">'.img_edit($langs->transnoentitiesnoconv('SetProject')).'</a></td>'; - print '</tr></table>'; - print '</td><td colspan="3">'; - if ($action == 'classify') - { - $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, $object->socid, $object->fk_project, 'projectid'); - } - else - { - $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, $object->socid, $object->fk_project, 'none'); - } - print '</td></tr>'; + $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, $object->socid, $object->fk_project, 'projectid'); } else { - print '</td></tr></table>'; - if (!empty($object->fk_project)) - { - print '<td colspan="3">'; - $proj = new Project($db); - $proj->fetch($object->fk_project); - print '<a href="../projet/fiche.php?id='.$object->fk_project.'" title="'.$langs->trans('ShowProject').'">'; - print $proj->ref; - print '</a>'; - print '</td>'; - } - else { - print '<td colspan="3"> </td>'; - } + $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, $object->socid, $object->fk_project, 'none'); } - print '</tr>'; + print '</td></tr>'; } - - // Other attributes - $parameters=array('colspan' => ' colspan="3"'); - $reshook=$hookmanager->executeHooks('formObjectOptions',$parameters,$object,$action); // Note that $action and $object may have been modified by hook - if (empty($reshook) && ! empty($extrafields->attribute_label)) - { - foreach($extrafields->attribute_label as $key=>$label) - { - $value=(isset($_POST["options_".$key])?$_POST["options_".$key]:$object->array_options["options_".$key]); - print "<tr><td>".$label.'</td><td colspan="3">'; - print $extrafields->showInputField($key,$value); - print '</td></tr>'."\n"; - } - } - - // Amount HT - print '<tr><td height="10">'.$langs->trans('AmountHT').'</td>'; - print '<td align="right" nowrap><b>'.price($object->total_ht).'</b></td>'; - print '<td>'.$langs->trans("Currency".$conf->currency).'</td></tr>'; - - // Amount VAT - print '<tr><td height="10">'.$langs->trans('AmountVAT').'</td>'; - print '<td align="right" nowrap>'.price($object->total_tva).'</td>'; - print '<td>'.$langs->trans("Currency".$conf->currency).'</td></tr>'; - - // Amount Local Taxes - if ($mysoc->country_code=='ES') + else { - if ($mysoc->localtax1_assuj=="1") //Localtax1 RE + print '</td></tr></table>'; + if (!empty($object->fk_project)) { - print '<tr><td height="10">'.$langs->transcountry("AmountLT1",$mysoc->country_code).'</td>'; - print '<td align="right" nowrap>'.price($object->total_localtax1).'</td>'; - print '<td>'.$langs->trans("Currency".$conf->currency).'</td></tr>'; + print '<td colspan="3">'; + $proj = new Project($db); + $proj->fetch($object->fk_project); + print '<a href="../projet/fiche.php?id='.$object->fk_project.'" title="'.$langs->trans('ShowProject').'">'; + print $proj->ref; + print '</a>'; + print '</td>'; } - if ($mysoc->localtax2_assuj=="1") //Localtax2 IRPF - { - print '<tr><td height="10">'.$langs->transcountry("AmountLT2",$mysoc->country_code).'</td>'; - print '<td align="right" nowrap>'.price($object->total_localtax2).'</td>'; - print '<td>'.$langs->trans("Currency".$conf->currency).'</td></tr>'; + else { + print '<td colspan="3"> </td>'; } } + print '</tr>'; +} - // Amount TTC - print '<tr><td height="10">'.$langs->trans('AmountTTC').'</td>'; - print '<td align="right" nowrap>'.price($object->total_ttc).'</td>'; - print '<td>'.$langs->trans("Currency".$conf->currency).'</td></tr>'; - - // Statut - print '<tr><td height="10">'.$langs->trans('Status').'</td><td align="left" colspan="3">'.$object->getLibStatut(4).'</td></tr>'; - - print '</table><br>'; - - if (! empty($conf->global->MAIN_DISABLE_CONTACTS_TAB)) - { - require_once(DOL_DOCUMENT_ROOT.'/core/class/html.formcompany.class.php'); - $formcompany= new FormCompany($db); - - $blocname = 'contacts'; - $title = $langs->trans('ContactsAddresses'); - include(DOL_DOCUMENT_ROOT.'/core/tpl/bloc_showhide.tpl.php'); - } - - if (! empty($conf->global->MAIN_DISABLE_NOTES_TAB)) +// Other attributes +$parameters=array('colspan' => ' colspan="3"'); +$reshook=$hookmanager->executeHooks('formObjectOptions',$parameters,$object,$action); // Note that $action and $object may have been modified by hook +if (empty($reshook) && ! empty($extrafields->attribute_label)) +{ + foreach($extrafields->attribute_label as $key=>$label) { - $blocname = 'notes'; - $title = $langs->trans('Notes'); - include(DOL_DOCUMENT_ROOT.'/core/tpl/bloc_showhide.tpl.php'); + $value=(isset($_POST["options_".$key])?$_POST["options_".$key]:$object->array_options["options_".$key]); + print "<tr><td>".$label.'</td><td colspan="3">'; + print $extrafields->showInputField($key,$value); + print '</td></tr>'."\n"; } +} - /* - * Lines - */ - - if ($conf->use_javascript_ajax && $object->statut == 0) - { - include(DOL_DOCUMENT_ROOT.'/core/tpl/ajaxrow.tpl.php'); - } - - print '<table id="tablelines" class="noborder" width="100%">'; +// Amount HT +print '<tr><td height="10">'.$langs->trans('AmountHT').'</td>'; +print '<td align="right" nowrap><b>'.price($object->total_ht).'</b></td>'; +print '<td>'.$langs->trans("Currency".$conf->currency).'</td></tr>'; - // Show object lines - $result = $object->getLinesArray(); - if (! empty($object->lines)) $object->printObjectLines($action,$mysoc,$soc,$lineid,0,$hookmanager); +// Amount VAT +print '<tr><td height="10">'.$langs->trans('AmountVAT').'</td>'; +print '<td align="right" nowrap>'.price($object->total_tva).'</td>'; +print '<td>'.$langs->trans("Currency".$conf->currency).'</td></tr>'; - /* - * Form to add new line - */ - if ($object->statut == 0 && $user->rights->propale->creer) +// Amount Local Taxes +if ($mysoc->country_code=='ES') +{ + if ($mysoc->localtax1_assuj=="1") //Localtax1 RE { - if ($action != 'editline') - { - $var=true; - - // Add free products/services - $object->formAddFreeProduct(0,$mysoc,$soc,$hookmanager); - - // Add predefined products/services - if ($conf->product->enabled || $conf->service->enabled) - { - $var=!$var; - $object->formAddPredefinedProduct(0,$mysoc,$soc,$hookmanager); - } - - $parameters=array(); - $reshook=$hookmanager->executeHooks('formAddObject',$parameters,$object,$action); // Note that $action and $object may have been modified by hook - } + print '<tr><td height="10">'.$langs->transcountry("AmountLT1",$mysoc->country_code).'</td>'; + print '<td align="right" nowrap>'.price($object->total_localtax1).'</td>'; + print '<td>'.$langs->trans("Currency".$conf->currency).'</td></tr>'; } - - print '</table>'; - - print '</div>'; - print "\n"; - - if ($action == 'statut') + if ($mysoc->localtax2_assuj=="1") //Localtax2 IRPF { - /* - * Formulaire cloture (signe ou non) - */ - $form_close = '<form action="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'" method="post">'; - $form_close.= '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">'; - $form_close.= '<table class="border" width="100%">'; - $form_close.= '<tr><td width="150" align="left">'.$langs->trans("CloseAs").'</td><td align="left">'; - $form_close.= '<input type="hidden" name="action" value="setstatut">'; - $form_close.= '<select id="statut" name="statut" class="flat">'; - $form_close.= '<option value="0"> </option>'; - $form_close.= '<option value="2">'.$object->labelstatut[2].'</option>'; - $form_close.= '<option value="3">'.$object->labelstatut[3].'</option>'; - $form_close.= '</select>'; - $form_close.= '</td></tr>'; - $form_close.= '<tr><td width="150" align="left">'.$langs->trans('Note').'</td><td align="left"><textarea cols="70" rows="'.ROWS_3.'" wrap="soft" name="note">'; - $form_close.= $object->note; - $form_close.= '</textarea></td></tr>'; - $form_close.= '<tr><td align="center" colspan="2">'; - $form_close.= '<input type="submit" class="button" name="validate" value="'.$langs->trans('Validate').'">'; - $form_close.= ' <input type="submit" class="button" name="cancel" value="'.$langs->trans('Cancel').'">'; - $form_close.= '<a name="close"> </a>'; - $form_close.= '</td>'; - $form_close.= '</tr></table></form>'; - - print $form_close; + print '<tr><td height="10">'.$langs->transcountry("AmountLT2",$mysoc->country_code).'</td>'; + print '<td align="right" nowrap>'.price($object->total_localtax2).'</td>'; + print '<td>'.$langs->trans("Currency".$conf->currency).'</td></tr>'; } +} +// Amount TTC +print '<tr><td height="10">'.$langs->trans('AmountTTC').'</td>'; +print '<td align="right" nowrap>'.price($object->total_ttc).'</td>'; +print '<td>'.$langs->trans("Currency".$conf->currency).'</td></tr>'; - /* - * Boutons Actions - */ - if ($action != 'presend') - { - print '<div class="tabsAction">'; - - if ($action != 'statut' && $action <> 'editline') - { - // Validate - if ($object->statut == 0 && $user->rights->propale->valider) - { - if (count($object->lines) > 0) print '<a class="butAction" href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&action=validate">'.$langs->trans('Validate').'</a>'; - else print '<a class="butActionRefused" href="#">'.$langs->trans('Validate').'</a>'; - } +// Statut +print '<tr><td height="10">'.$langs->trans('Status').'</td><td align="left" colspan="3">'.$object->getLibStatut(4).'</td></tr>'; - // Edit - if ($object->statut == 1 && $user->rights->propale->creer) - { - print '<a class="butAction" href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&action=modif">'.$langs->trans('Modify').'</a>'; - } +print '</table><br>'; - // ReOpen - if (($object->statut == 2 || $object->statut == 3) && $user->rights->propale->cloturer) - { - print '<a class="butAction" href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&action=reopen'.(empty($conf->global->MAIN_JUMP_TAG)?'':'#reopen').'"'; - print '>'.$langs->trans('ReOpen').'</a>'; - } +if (! empty($conf->global->MAIN_DISABLE_CONTACTS_TAB)) +{ + require_once(DOL_DOCUMENT_ROOT.'/core/class/html.formcompany.class.php'); + $formcompany= new FormCompany($db); + + $blocname = 'contacts'; + $title = $langs->trans('ContactsAddresses'); + include(DOL_DOCUMENT_ROOT.'/core/tpl/bloc_showhide.tpl.php'); +} - // Send - if ($object->statut == 1 || $object->statut == 2) - { - if (empty($conf->global->MAIN_USE_ADVANCED_PERMS) || $user->rights->propale->propal_advance->send) - { - print '<a class="butAction" href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&action=presend&mode=init">'.$langs->trans('SendByMail').'</a>'; - } - else print '<a class="butActionRefused" href="#">'.$langs->trans('SendByMail').'</a>'; - } +if (! empty($conf->global->MAIN_DISABLE_NOTES_TAB)) +{ + $blocname = 'notes'; + $title = $langs->trans('Notes'); + include(DOL_DOCUMENT_ROOT.'/core/tpl/bloc_showhide.tpl.php'); +} - // Create an order - if ($conf->commande->enabled && $object->statut == 2 && $user->societe_id == 0) - { - if ($user->rights->commande->creer) - { - print '<a class="butAction" href="'.DOL_URL_ROOT.'/commande/fiche.php?action=create&origin='.$object->element.'&originid='.$object->id.'&socid='.$object->socid.'">'.$langs->trans("AddOrder").'</a>'; - } - } +/* + * Lines + */ - // Create an invoice and classify billed - if ($object->statut == 2 && $user->societe_id == 0) - { - if ($conf->facture->enabled && $user->rights->facture->creer) - { - print '<a class="butAction" href="'.DOL_URL_ROOT.'/compta/facture.php?action=create&origin='.$object->element.'&originid='.$object->id.'&socid='.$object->socid.'">'.$langs->trans("AddBill").'</a>'; - } +if ($conf->use_javascript_ajax && $object->statut == 0) +{ + include(DOL_DOCUMENT_ROOT.'/core/tpl/ajaxrow.tpl.php'); +} - $arraypropal=$object->getInvoiceArrayList(); - if (is_array($arraypropal) && count($arraypropal) > 0) - { - print '<a class="butAction" href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&action=classifybilled&socid='.$object->socid.'">'.$langs->trans("ClassifyBilled").'</a>'; - } - } +print '<table id="tablelines" class="noborder" width="100%">'; - // Close - if ($object->statut == 1 && $user->rights->propale->cloturer) - { - print '<a class="butAction" href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&action=statut'.(empty($conf->global->MAIN_JUMP_TAG)?'':'#close').'"'; - print '>'.$langs->trans('Close').'</a>'; - } +// Show object lines +$result = $object->getLinesArray(); +if (! empty($object->lines)) $object->printObjectLines($action,$mysoc,$soc,$lineid,0,$hookmanager); - // Clone - if ($object->type == 0 && $user->rights->propale->creer) - { - print '<a class="butAction" href="'.$_SERVER['PHP_SELF'].'?id='.$object->id.'&socid='.$object->socid.'&action=clone&object=propal">'.$langs->trans("ToClone").'</a>'; - } +/* + * Form to add new line + */ +if ($object->statut == 0 && $user->rights->propale->creer) +{ + if ($action != 'editline') + { + $var=true; - // Delete - if ($user->rights->propale->supprimer) - { - print '<a class="butActionDelete" href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&action=delete"'; - print '>'.$langs->trans('Delete').'</a>'; - } + // Add free products/services + $object->formAddFreeProduct(0,$mysoc,$soc,$hookmanager); + // Add predefined products/services + if ($conf->product->enabled || $conf->service->enabled) + { + $var=!$var; + $object->formAddPredefinedProduct(0,$mysoc,$soc,$hookmanager); } - print '</div>'; - print "<br>\n"; + $parameters=array(); + $reshook=$hookmanager->executeHooks('formAddObject',$parameters,$object,$action); // Note that $action and $object may have been modified by hook } +} - if ($action != 'presend') - { - print '<table width="100%"><tr><td width="50%" valign="top">'; - print '<a name="builddoc"></a>'; // ancre - - - /* - * Documents generes - */ - $filename=dol_sanitizeFileName($object->ref); - $filedir=$conf->propal->dir_output . "/" . dol_sanitizeFileName($object->ref); - $urlsource=$_SERVER["PHP_SELF"]."?id=".$object->id; - $genallowed=$user->rights->propale->creer; - $delallowed=$user->rights->propale->supprimer; - - $var=true; - - $somethingshown=$formfile->show_documents('propal',$filename,$filedir,$urlsource,$genallowed,$delallowed,$object->modelpdf,1,0,0,28,0,'',0,'',$soc->default_lang,$hookmanager); +print '</table>'; +print '</div>'; +print "\n"; - /* - * Linked object block - */ - $somethingshown=$object->showLinkedObjectBlock(); +if ($action == 'statut') +{ + /* + * Formulaire cloture (signe ou non) + */ + $form_close = '<form action="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'" method="post">'; + $form_close.= '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">'; + $form_close.= '<table class="border" width="100%">'; + $form_close.= '<tr><td width="150" align="left">'.$langs->trans("CloseAs").'</td><td align="left">'; + $form_close.= '<input type="hidden" name="action" value="setstatut">'; + $form_close.= '<select id="statut" name="statut" class="flat">'; + $form_close.= '<option value="0"> </option>'; + $form_close.= '<option value="2">'.$object->labelstatut[2].'</option>'; + $form_close.= '<option value="3">'.$object->labelstatut[3].'</option>'; + $form_close.= '</select>'; + $form_close.= '</td></tr>'; + $form_close.= '<tr><td width="150" align="left">'.$langs->trans('Note').'</td><td align="left"><textarea cols="70" rows="'.ROWS_3.'" wrap="soft" name="note">'; + $form_close.= $object->note; + $form_close.= '</textarea></td></tr>'; + $form_close.= '<tr><td align="center" colspan="2">'; + $form_close.= '<input type="submit" class="button" name="validate" value="'.$langs->trans('Validate').'">'; + $form_close.= ' <input type="submit" class="button" name="cancel" value="'.$langs->trans('Cancel').'">'; + $form_close.= '<a name="close"> </a>'; + $form_close.= '</td>'; + $form_close.= '</tr></table></form>'; + + print $form_close; +} - print '</td><td valign="top" width="50%">'; - // List of actions on element - include_once(DOL_DOCUMENT_ROOT.'/core/class/html.formactions.class.php'); - $formactions=new FormActions($db); - $somethingshown=$formactions->showactions($object,'propal',$socid); +/* + * Boutons Actions + */ +if ($action != 'presend') +{ + print '<div class="tabsAction">'; - print '</td></tr></table>'; - } + if ($action != 'statut' && $action <> 'editline') + { + // Validate + if ($object->statut == 0 && $user->rights->propale->valider) + { + if (count($object->lines) > 0) print '<a class="butAction" href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&action=validate">'.$langs->trans('Validate').'</a>'; + else print '<a class="butActionRefused" href="#">'.$langs->trans('Validate').'</a>'; + } + // Edit + if ($object->statut == 1 && $user->rights->propale->creer) + { + print '<a class="butAction" href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&action=modif">'.$langs->trans('Modify').'</a>'; + } - /* - * Action presend - * - */ - if ($action == 'presend') - { - $ref = dol_sanitizeFileName($object->ref); - include_once(DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'); - $fileparams = dol_most_recent_file($conf->propal->dir_output . '/' . $ref); - $file=$fileparams['fullname']; + // ReOpen + if (($object->statut == 2 || $object->statut == 3) && $user->rights->propale->cloturer) + { + print '<a class="butAction" href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&action=reopen'.(empty($conf->global->MAIN_JUMP_TAG)?'':'#reopen').'"'; + print '>'.$langs->trans('ReOpen').'</a>'; + } - // Build document if it not exists - if (! $file || ! is_readable($file)) - { - // Define output language - $outputlangs = $langs; - $newlang=''; - if ($conf->global->MAIN_MULTILANGS && empty($newlang) && ! empty($_REQUEST['lang_id'])) $newlang=$_REQUEST['lang_id']; - if ($conf->global->MAIN_MULTILANGS && empty($newlang)) $newlang=$object->client->default_lang; - if (! empty($newlang)) + // Send + if ($object->statut == 1 || $object->statut == 2) + { + if (empty($conf->global->MAIN_USE_ADVANCED_PERMS) || $user->rights->propale->propal_advance->send) { - $outputlangs = new Translate("",$conf); - $outputlangs->setDefaultLang($newlang); + print '<a class="butAction" href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&action=presend&mode=init">'.$langs->trans('SendByMail').'</a>'; } + else print '<a class="butActionRefused" href="#">'.$langs->trans('SendByMail').'</a>'; + } - $result=propale_pdf_create($db, $object, GETPOST('model')?GETPOST('model'):$object->modelpdf, $outputlangs, GETPOST('hidedetails'), GETPOST('hidedesc'), GETPOST('hideref'), $hookmanager); - if ($result <= 0) + // Create an order + if ($conf->commande->enabled && $object->statut == 2 && $user->societe_id == 0) + { + if ($user->rights->commande->creer) { - dol_print_error($db,$result); - exit; + print '<a class="butAction" href="'.DOL_URL_ROOT.'/commande/fiche.php?action=create&origin='.$object->element.'&originid='.$object->id.'&socid='.$object->socid.'">'.$langs->trans("AddOrder").'</a>'; } - $fileparams = dol_most_recent_file($conf->propal->dir_output . '/' . $ref); - $file=$fileparams['fullname']; } - print '<br>'; - print_titre($langs->trans('SendPropalByMail')); - - // Create form object - include_once(DOL_DOCUMENT_ROOT.'/core/class/html.formmail.class.php'); - $formmail = new FormMail($db); - $formmail->fromtype = 'user'; - $formmail->fromid = $user->id; - $formmail->fromname = $user->getFullName($langs); - $formmail->frommail = $user->email; - $formmail->withfrom=1; - $formmail->withto=empty($_POST["sendto"])?1:$_POST["sendto"]; - $formmail->withtosocid=$soc->id; - $formmail->withtocc=1; - $formmail->withtoccsocid=0; - $formmail->withtoccc=$conf->global->MAIN_EMAIL_USECCC; - $formmail->withtocccsocid=0; - $formmail->withtopic=$langs->trans('SendPropalRef','__PROPREF__'); - $formmail->withfile=2; - $formmail->withbody=1; - $formmail->withdeliveryreceipt=1; - $formmail->withcancel=1; - - // Tableau des substitutions - $formmail->substit['__PROPREF__']=$object->ref; - $formmail->substit['__SIGNATURE__']=$user->signature; - $formmail->substit['__PERSONALIZED__']=''; - // Tableau des parametres complementaires - $formmail->param['action']='send'; - $formmail->param['models']='propal_send'; - $formmail->param['id']=$object->id; - $formmail->param['returnurl']=$_SERVER["PHP_SELF"].'?id='.$object->id; - - // Init list of files - if (GETPOST("mode")=='init') + // Create an invoice and classify billed + if ($object->statut == 2 && $user->societe_id == 0) { - $formmail->clear_attached_files(); - $formmail->add_attached_files($file,basename($file),dol_mimetype($file)); - } - - $formmail->show_form(); - - print '<br>'; - } - -} -else -{ - /**************************************************************************** - * * - * Mode Liste des propales * - * * - ****************************************************************************/ - - $now=dol_now(); - - $sortfield = GETPOST("sortfield",'alpha'); - $sortorder = GETPOST("sortorder",'alpha'); - $page = GETPOST("page",'int'); - if ($page == -1) { $page = 0; } - $offset = $conf->liste_limit * $page; - $pageprev = $page - 1; - $pagenext = $page + 1; - - $viewstatut=$db->escape(GETPOST('viewstatut')); - $object_statut = $db->escape(GETPOST('propal_statut')); - if($object_statut != '') - $viewstatut=$object_statut; - - if (! $sortfield) $sortfield='p.datep'; - if (! $sortorder) $sortorder='DESC'; - $limit = $conf->liste_limit; - - $sql = 'SELECT s.nom, s.rowid, s.client, '; - $sql.= 'p.rowid as propalid, p.total_ht, p.ref, p.ref_client, p.fk_statut, p.fk_user_author, p.datep as dp, p.fin_validite as dfv,'; - if (! $user->rights->societe->client->voir && ! $socid) $sql .= " sc.fk_soc, sc.fk_user,"; - $sql.= ' u.login'; - $sql.= ' FROM ('.MAIN_DB_PREFIX.'societe as s, '.MAIN_DB_PREFIX.'propal as p'; - if (! $user->rights->societe->client->voir && ! $socid) $sql .= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc"; - $sql.= ')'; - if ($sall) $sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'propaldet as pd ON p.rowid=pd.fk_propal'; - $sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'user as u ON p.fk_user_author = u.rowid'; - $sql.= ' WHERE p.fk_soc = s.rowid'; - $sql.= ' AND p.entity = '.$conf->entity; - - if (! $user->rights->societe->client->voir && ! $socid) //restriction - { - $sql.= " AND s.rowid = sc.fk_soc AND sc.fk_user = " .$user->id; - } - if ($search_ref) - { - $sql.= " AND p.ref LIKE '%".$db->escape(trim($search_ref))."%'"; - } - if ($search_refcustomer) - { - $sql.= " AND p.ref_client LIKE '%".$db->escape(trim($search_refcustomer))."%'"; - } - if ($search_societe) - { - $sql.= " AND s.nom LIKE '%".$db->escape(trim($search_societe))."%'"; - } - if ($search_montant_ht) - { - $sql.= " AND p.total_ht='".$db->escape(trim($search_montant_ht))."'"; - } - if ($sall) $sql.= " AND (s.nom LIKE '%".$db->escape($sall)."%' OR p.note LIKE '%".$db->escape($sall)."%' OR pd.description LIKE '%".$db->escape($sall)."%')"; - if ($socid) $sql.= ' AND s.rowid = '.$socid; - if ($viewstatut <> '') - { - $sql.= ' AND p.fk_statut IN ('.$viewstatut.')'; - } - if ($month > 0) - { - if ($year > 0) - $sql.= " AND date_format(p.datep, '%Y-%m') = '".$year."-".$month."'"; - else - $sql.= " AND date_format(p.datep, '%m') = '".$month."'"; - } - if ($year > 0) - { - $sql.= " AND date_format(p.datep, '%Y') = '".$year."'"; - } - - $sql.= ' ORDER BY '.$sortfield.' '.$sortorder.', p.ref DESC'; - $sql.= $db->plimit($limit + 1,$offset); - $result=$db->query($sql); + if ($conf->facture->enabled && $user->rights->facture->creer) + { + print '<a class="butAction" href="'.DOL_URL_ROOT.'/compta/facture.php?action=create&origin='.$object->element.'&originid='.$object->id.'&socid='.$object->socid.'">'.$langs->trans("AddBill").'</a>'; + } - if ($result) - { - $objectstatic=new Propal($db); - $userstatic=new User($db); + $arraypropal=$object->getInvoiceArrayList(); + if (is_array($arraypropal) && count($arraypropal) > 0) + { + print '<a class="butAction" href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&action=classifybilled&socid='.$object->socid.'">'.$langs->trans("ClassifyBilled").'</a>'; + } + } - $num = $db->num_rows($result); + // Close + if ($object->statut == 1 && $user->rights->propale->cloturer) + { + print '<a class="butAction" href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&action=statut'.(empty($conf->global->MAIN_JUMP_TAG)?'':'#close').'"'; + print '>'.$langs->trans('Close').'</a>'; + } - if ($socid) + // Clone + if ($object->type == 0 && $user->rights->propale->creer) { - $soc = new Societe($db); - $soc->fetch($socid); + print '<a class="butAction" href="'.$_SERVER['PHP_SELF'].'?id='.$object->id.'&socid='.$object->socid.'&action=clone&object=propal">'.$langs->trans("ToClone").'</a>'; } - $param='&socid='.$socid.'&viewstatut='.$viewstatut; - if ($month) $param.='&month='.$month; - if ($year) $param.='&year='.$year; - print_barre_liste($langs->trans('ListOfProposals').' '.($socid?'- '.$soc->nom:''), $page,'propal.php',$param,$sortfield,$sortorder,'',$num); - - $i = 0; - print '<table class="liste" width="100%">'; - print '<tr class="liste_titre">'; - print_liste_field_titre($langs->trans('Ref'),$_SERVER["PHP_SELF"],'p.ref','',$param,'',$sortfield,$sortorder); - print_liste_field_titre($langs->trans('Company'),$_SERVER["PHP_SELF"],'s.nom','',$param,'',$sortfield,$sortorder); - print_liste_field_titre($langs->trans('RefCustomer'),$_SERVER["PHP_SELF"],'p.ref_client','',$param,'',$sortfield,$sortorder); - print_liste_field_titre($langs->trans('Date'),$_SERVER["PHP_SELF"],'p.datep','',$param, 'align="center"',$sortfield,$sortorder); - print_liste_field_titre($langs->trans('DateEndPropalShort'),$_SERVER["PHP_SELF"],'dfv','',$param, 'align="center"',$sortfield,$sortorder); - print_liste_field_titre($langs->trans('AmountHT'),$_SERVER["PHP_SELF"],'p.total_ht','',$param, 'align="right"',$sortfield,$sortorder); - print_liste_field_titre($langs->trans('Author'),$_SERVER["PHP_SELF"],'u.login','',$param,'align="right"',$sortfield,$sortorder); - print_liste_field_titre($langs->trans('Status'),$_SERVER["PHP_SELF"],'p.fk_statut','',$param,'align="right"',$sortfield,$sortorder); - print_liste_field_titre(''); - print "</tr>\n"; - // Lignes des champs de filtre - print '<form method="get" action="'.$_SERVER["PHP_SELF"].'">'; - - print '<tr class="liste_titre">'; - print '<td class="liste_titre">'; - print '<input class="flat" size="10" type="text" name="search_ref" value="'.$search_ref.'">'; - print '</td>'; - print '<td class="liste_titre" align="left">'; - print '<input class="flat" type="text" size="16" name="search_societe" value="'.$search_societe.'">'; - print '</td>'; - print '<td class="liste_titre">'; - print '<input class="flat" size="10" type="text" name="search_refcustomer" value="'.$search_refcustomer.'">'; - print '</td>'; - print '<td class="liste_titre" colspan="1" align="center">'; - print $langs->trans('Month').': <input class="flat" type="text" size="1" maxlength="2" name="month" value="'.$month.'">'; - print ' '.$langs->trans('Year').': '; - $syear = $year; - $formother->select_year($syear,'year',1, 20, 5); - print '</td>'; - print '<td class="liste_titre" colspan="1"> </td>'; - print '<td class="liste_titre" align="right">'; - print '<input class="flat" type="text" size="10" name="search_montant_ht" value="'.$search_montant_ht.'">'; - print '</td>'; - print '<td class="liste_titre"> </td>'; - print '<td class="liste_titre" align="right">'; - $formpropal->select_propal_statut($viewstatut,1); - print '</td>'; - print '<td class="liste_titre" align="right"><input class="liste_titre" type="image" src="'.DOL_URL_ROOT.'/theme/'.$conf->theme.'/img/search.png" value="'.dol_escape_htmltag($langs->trans("Search")).'" title="'.dol_escape_htmltag($langs->trans("Search")).'">'; - print '</td>'; - print "</tr>\n"; - print '</form>'; + // Delete + if ($user->rights->propale->supprimer) + { + print '<a class="butActionDelete" href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&action=delete"'; + print '>'.$langs->trans('Delete').'</a>'; + } - $var=true; + } - while ($i < min($num,$limit)) - { - $objp = $db->fetch_object($result); - $now = time(); - $var=!$var; - print '<tr '.$bc[$var].'>'; - print '<td nowrap="nowrap">'; + print '</div>'; + print "<br>\n"; +} - $objectstatic->id=$objp->propalid; - $objectstatic->ref=$objp->ref; +if ($action != 'presend') +{ + print '<table width="100%"><tr><td width="50%" valign="top">'; + print '<a name="builddoc"></a>'; // ancre - print '<table class="nobordernopadding"><tr class="nocellnopadd">'; - print '<td class="nobordernopadding" nowrap="nowrap">'; - print $objectstatic->getNomUrl(1); - print '</td>'; - print '<td width="20" class="nobordernopadding" nowrap="nowrap">'; - if ($objp->fk_statut == 1 && $objp->dfv < ($now - $conf->propal->cloture->warning_delay)) print img_warning($langs->trans("Late")); - print '</td>'; + /* + * Documents generes + */ + $filename=dol_sanitizeFileName($object->ref); + $filedir=$conf->propal->dir_output . "/" . dol_sanitizeFileName($object->ref); + $urlsource=$_SERVER["PHP_SELF"]."?id=".$object->id; + $genallowed=$user->rights->propale->creer; + $delallowed=$user->rights->propale->supprimer; - print '<td width="16" align="right" class="nobordernopadding">'; - $filename=dol_sanitizeFileName($objp->ref); - $filedir=$conf->propal->dir_output . '/' . dol_sanitizeFileName($objp->ref); - $urlsource=$_SERVER['PHP_SELF'].'?id='.$objp->propalid; - $formfile->show_documents('propal',$filename,$filedir,$urlsource,'','','',1,'',1); - print '</td></tr></table>'; + $var=true; - if ($objp->client == 1) - { - $url = DOL_URL_ROOT.'/comm/fiche.php?socid='.$objp->rowid; - } - else - { - $url = DOL_URL_ROOT.'/comm/prospect/fiche.php?socid='.$objp->rowid; - } + $somethingshown=$formfile->show_documents('propal',$filename,$filedir,$urlsource,$genallowed,$delallowed,$object->modelpdf,1,0,0,28,0,'',0,'',$soc->default_lang,$hookmanager); - // Company - $companystatic->id=$objp->rowid; - $companystatic->nom=$objp->nom; - $companystatic->client=$objp->client; - print '<td>'; - print $companystatic->getNomUrl(1,'customer'); - print '</td>'; - // Customer ref - print '<td nowrap="nowrap">'; - print $objp->ref_client; - print '</td>'; + /* + * Linked object block + */ + $somethingshown=$object->showLinkedObjectBlock(); - // Date propale - print '<td align="center">'; - $y = dol_print_date($db->jdate($objp->dp),'%Y'); - $m = dol_print_date($db->jdate($objp->dp),'%m'); - $mt= dol_print_date($db->jdate($objp->dp),'%b'); - $d = dol_print_date($db->jdate($objp->dp),'%d'); - print $d."\n"; - print ' <a href="'.$_SERVER["PHP_SELF"].'?year='.$y.'&month='.$m.'">'; - print $mt."</a>\n"; - print ' <a href="'.$_SERVER["PHP_SELF"].'?year='.$y.'">'; - print $y."</a></td>\n"; - - // Date fin validite - if ($objp->dfv) - { - print '<td align="center">'.dol_print_date($db->jdate($objp->dfv),'day'); - print '</td>'; - } - else - { - print '<td> </td>'; - } + print '</td><td valign="top" width="50%">'; - print '<td align="right">'.price($objp->total_ht)."</td>\n"; + // List of actions on element + include_once(DOL_DOCUMENT_ROOT.'/core/class/html.formactions.class.php'); + $formactions=new FormActions($db); + $somethingshown=$formactions->showactions($object,'propal',$socid); - $userstatic->id=$objp->fk_user_author; - $userstatic->login=$objp->login; - print '<td align="center">'; - if ($userstatic->id) print $userstatic->getLoginUrl(1); - else print ' '; - print "</td>\n"; + print '</td></tr></table>'; +} - print '<td align="right">'.$objectstatic->LibStatut($objp->fk_statut,5)."</td>\n"; - print '<td> </td>'; +/* + * Action presend + * + */ +if ($action == 'presend') +{ + $ref = dol_sanitizeFileName($object->ref); + include_once(DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'); + $fileparams = dol_most_recent_file($conf->propal->dir_output . '/' . $ref); + $file=$fileparams['fullname']; - print "</tr>\n"; + // Build document if it not exists + if (! $file || ! is_readable($file)) + { + // Define output language + $outputlangs = $langs; + $newlang=''; + if ($conf->global->MAIN_MULTILANGS && empty($newlang) && ! empty($_REQUEST['lang_id'])) $newlang=$_REQUEST['lang_id']; + if ($conf->global->MAIN_MULTILANGS && empty($newlang)) $newlang=$object->client->default_lang; + if (! empty($newlang)) + { + $outputlangs = new Translate("",$conf); + $outputlangs->setDefaultLang($newlang); + } - $total = $total + $objp->total_ht; - $subtotal = $subtotal + $objp->total_ht; + $result=propale_pdf_create($db, $object, GETPOST('model')?GETPOST('model'):$object->modelpdf, $outputlangs, GETPOST('hidedetails'), GETPOST('hidedesc'), GETPOST('hideref'), $hookmanager); + if ($result <= 0) + { + dol_print_error($db,$result); + exit; + } + $fileparams = dol_most_recent_file($conf->propal->dir_output . '/' . $ref); + $file=$fileparams['fullname']; + } - $i++; - } - print '</table>'; - $db->free($result); - } - else - { - dol_print_error($db); - } + print '<br>'; + print_titre($langs->trans('SendPropalByMail')); + + // Create form object + include_once(DOL_DOCUMENT_ROOT.'/core/class/html.formmail.class.php'); + $formmail = new FormMail($db); + $formmail->fromtype = 'user'; + $formmail->fromid = $user->id; + $formmail->fromname = $user->getFullName($langs); + $formmail->frommail = $user->email; + $formmail->withfrom=1; + $formmail->withto=empty($_POST["sendto"])?1:$_POST["sendto"]; + $formmail->withtosocid=$soc->id; + $formmail->withtocc=1; + $formmail->withtoccsocid=0; + $formmail->withtoccc=$conf->global->MAIN_EMAIL_USECCC; + $formmail->withtocccsocid=0; + $formmail->withtopic=$langs->trans('SendPropalRef','__PROPREF__'); + $formmail->withfile=2; + $formmail->withbody=1; + $formmail->withdeliveryreceipt=1; + $formmail->withcancel=1; + + // Tableau des substitutions + $formmail->substit['__PROPREF__']=$object->ref; + $formmail->substit['__SIGNATURE__']=$user->signature; + $formmail->substit['__PERSONALIZED__']=''; + // Tableau des parametres complementaires + $formmail->param['action']='send'; + $formmail->param['models']='propal_send'; + $formmail->param['id']=$object->id; + $formmail->param['returnurl']=$_SERVER["PHP_SELF"].'?id='.$object->id; + + // Init list of files + if (GETPOST("mode")=='init') + { + $formmail->clear_attached_files(); + $formmail->add_attached_files($file,basename($file),dol_mimetype($file)); + } + + $formmail->show_form(); + + print '<br>'; } diff --git a/htdocs/comm/propal/contact.php b/htdocs/comm/propal/contact.php index d129c1b40ae22081120ff5c9c528147584770de4..c632f2f34057b5dbd9aeed1fff83f12f983d96c9 100644 --- a/htdocs/comm/propal/contact.php +++ b/htdocs/comm/propal/contact.php @@ -152,7 +152,7 @@ if ($id > 0 || ! empty($ref)) */ print '<table class="border" width="100%">'; - $linkback='<a href="'.DOL_URL_ROOT.'/comm/propal.php?page='.$page.'&socid='.$socid.'&viewstatut='.$viewstatut.'&sortfield='.$sortfield.'&sortorder='.$sortorder.'">'.$langs->trans("BackToList").'</a>'; + $linkback='<a href="'.DOL_URL_ROOT.'/comm/propal/list.php?page='.$page.'&socid='.$socid.'&viewstatut='.$viewstatut.'&sortfield='.$sortfield.'&sortorder='.$sortorder.'">'.$langs->trans("BackToList").'</a>'; // Ref print '<tr><td width="25%">'.$langs->trans('Ref').'</td><td colspan="3">'; diff --git a/htdocs/comm/propal/document.php b/htdocs/comm/propal/document.php index 45c4732f836ec527ba475327e4565e6e9834038e..4a2ea5d326de82cd2c1ff65354b0048ed06606ee 100644 --- a/htdocs/comm/propal/document.php +++ b/htdocs/comm/propal/document.php @@ -145,7 +145,7 @@ if ($id > 0 || ! empty($ref)) print '<table class="border"width="100%">'; - $linkback='<a href="'.DOL_URL_ROOT.'/comm/propal.php'."?page=$page&socid=$socid&viewstatut=$viewstatut&sortfield=$sortfield&$sortorder".'">'.$langs->trans("BackToList").'</a>'; + $linkback='<a href="'.DOL_URL_ROOT.'/comm/propal/list.php'."?page=$page&socid=$socid&viewstatut=$viewstatut&sortfield=$sortfield&$sortorder".'">'.$langs->trans("BackToList").'</a>'; // Ref print '<tr><td width="25%">'.$langs->trans('Ref').'</td><td colspan="3">'; diff --git a/htdocs/comm/propal/list.php b/htdocs/comm/propal/list.php new file mode 100644 index 0000000000000000000000000000000000000000..c6de90c89f3a560c8fd6d082564a772165ab5008 --- /dev/null +++ b/htdocs/comm/propal/list.php @@ -0,0 +1,400 @@ +<?php +/* Copyright (C) 2001-2007 Rodolphe Quiedeville <rodolphe@quiedeville.org> + * Copyright (C) 2004-2011 Laurent Destailleur <eldy@users.sourceforge.net> + * Copyright (C) 2004 Eric Seigne <eric.seigne@ryxeo.com> + * Copyright (C) 2005 Marc Barilley / Ocebo <marc@ocebo.com> + * Copyright (C) 2005-2012 Regis Houssin <regis@dolibarr.fr> + * Copyright (C) 2006 Andre Cianfarani <acianfa@free.fr> + * Copyright (C) 2010-2011 Juanjo Menent <jmenent@2byte.es> + * Copyright (C) 2010-2011 Philippe Grand <philippe.grand@atoo-net.com> + * Copyright (C) 2012 Christophe Battarel <christophe.battarel@altairis.fr> +* + * 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 2 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 <http://www.gnu.org/licenses/>. + */ + +/** + * \file htdocs/comm/propal.php + * \ingroup propale + * \brief Page of commercial proposals card and list + */ + +require("../../main.inc.php"); +require_once(DOL_DOCUMENT_ROOT."/core/class/html.formother.class.php"); +require_once(DOL_DOCUMENT_ROOT."/core/class/html.formfile.class.php"); +require_once(DOL_DOCUMENT_ROOT."/core/class/html.formpropal.class.php"); +require_once(DOL_DOCUMENT_ROOT.'/comm/propal/class/propal.class.php'); +require_once(DOL_DOCUMENT_ROOT.'/comm/action/class/actioncomm.class.php'); +require_once(DOL_DOCUMENT_ROOT."/core/modules/propale/modules_propale.php"); +require_once(DOL_DOCUMENT_ROOT."/core/lib/propal.lib.php"); +require_once(DOL_DOCUMENT_ROOT."/core/lib/functions2.lib.php"); +if ($conf->projet->enabled) require_once(DOL_DOCUMENT_ROOT.'/projet/class/project.class.php'); + +$langs->load('companies'); +$langs->load('propal'); +$langs->load('compta'); +$langs->load('bills'); +$langs->load('orders'); +$langs->load('products'); + +$id=GETPOST('id','int'); +$ref=GETPOST('ref','alpha'); +$socid=GETPOST('socid','int'); +$action=GETPOST('action','alpha'); +$confirm=GETPOST('confirm','alpha'); +$lineid=GETPOST('lineid','int'); + +$search_user=GETPOST('search_user','int'); +$search_ref=GETPOST('sf_ref')?GETPOST('sf_ref','alpha'):GETPOST('search_ref','alpha'); +$search_refcustomer=GETPOST('search_refcustomer','alpha'); +$search_societe=GETPOST('search_societe','alpha'); +$search_montant_ht=GETPOST('search_montant_ht','alpha'); + +$sall=GETPOST("sall"); +$mesg=(GETPOST("msg") ? GETPOST("msg") : GETPOST("mesg")); +$year=GETPOST("year"); +$month=GETPOST("month"); + +// Nombre de ligne pour choix de produit/service predefinis +$NBLINES=4; + +// Security check +$module='propale'; +if (isset($socid)) +{ + $objectid=$socid; + $module='societe'; + $dbtable='&societe'; +} +else if (isset($id) && $id > 0) +{ + $objectid=$id; + $module='propale'; + $dbtable='propal'; +} +if ($user->societe_id) $socid=$user->societe_id; +$result = restrictedArea($user, $module, $objectid, $dbtable); + +$object = new Propal($db); + +// Load object +if ($id > 0 || ! empty($ref)) +{ + $ret=$object->fetch($id, $ref); +} + +// Initialize technical object to manage hooks of thirdparties. Note that conf->hooks_modules contains array array +include_once(DOL_DOCUMENT_ROOT.'/core/class/hookmanager.class.php'); +$hookmanager=new HookManager($db); +$hookmanager->initHooks(array('propalcard')); + + + +/* + * Actions + */ + +// Do we click on purge search criteria ? +if (GETPOST("button_removefilter_x")) +{ + $search_categ=''; + $search_user=''; + $search_ref=''; + $search_refcustomer=''; + $search_societe=''; + $search_montant_ht=''; + $year=''; + $month=''; +} + + +/* + * View + */ + +llxHeader('',$langs->trans('Proposal'),'EN:Commercial_Proposals|FR:Proposition_commerciale|ES:Presupuestos'); + +$form = new Form($db); +$formother = new FormOther($db); +$formfile = new FormFile($db); +$formpropal = new FormPropal($db); +$companystatic=new Societe($db); + +$now=dol_now(); + +$sortfield = GETPOST("sortfield",'alpha'); +$sortorder = GETPOST("sortorder",'alpha'); +$page = GETPOST("page",'int'); +if ($page == -1) { $page = 0; } +$offset = $conf->liste_limit * $page; +$pageprev = $page - 1; +$pagenext = $page + 1; + +$viewstatut=$db->escape(GETPOST('viewstatut')); +$object_statut = $db->escape(GETPOST('propal_statut')); +if($object_statut != '') +$viewstatut=$object_statut; + +if (! $sortfield) $sortfield='p.datep'; +if (! $sortorder) $sortorder='DESC'; +$limit = $conf->liste_limit; + +$sql = 'SELECT s.nom, s.rowid, s.client, '; +$sql.= 'p.rowid as propalid, p.total_ht, p.ref, p.ref_client, p.fk_statut, p.fk_user_author, p.datep as dp, p.fin_validite as dfv,'; +if (! $user->rights->societe->client->voir && ! $socid) $sql .= " sc.fk_soc, sc.fk_user,"; +$sql.= ' u.login'; +$sql.= ' FROM '.MAIN_DB_PREFIX.'societe as s, '.MAIN_DB_PREFIX.'propal as p'; +if ($sall) $sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'propaldet as pd ON p.rowid=pd.fk_propal'; +$sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'user as u ON p.fk_user_author = u.rowid'; +if (! $user->rights->societe->client->voir && ! $socid) $sql .= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc"; +if ($search_user > 0) +{ + $sql.=", ".MAIN_DB_PREFIX."element_contact as c"; + $sql.=", ".MAIN_DB_PREFIX."c_type_contact as tc"; +} +$sql.= ' WHERE p.fk_soc = s.rowid'; +$sql.= ' AND p.entity = '.$conf->entity; + +if (! $user->rights->societe->client->voir && ! $socid) //restriction +{ + $sql.= " AND s.rowid = sc.fk_soc AND sc.fk_user = " .$user->id; +} +if ($search_ref) +{ + $sql.= " AND p.ref LIKE '%".$db->escape(trim($search_ref))."%'"; +} +if ($search_refcustomer) +{ + $sql.= " AND p.ref_client LIKE '%".$db->escape(trim($search_refcustomer))."%'"; +} +if ($search_societe) +{ + $sql.= " AND s.nom LIKE '%".$db->escape(trim($search_societe))."%'"; +} +if ($search_montant_ht) +{ + $sql.= " AND p.total_ht='".$db->escape(trim($search_montant_ht))."'"; +} +if ($sall) $sql.= " AND (s.nom LIKE '%".$db->escape($sall)."%' OR p.note LIKE '%".$db->escape($sall)."%' OR pd.description LIKE '%".$db->escape($sall)."%')"; +if ($socid) $sql.= ' AND s.rowid = '.$socid; +if ($viewstatut <> '') +{ + $sql.= ' AND p.fk_statut IN ('.$viewstatut.')'; +} +if ($month > 0) +{ + if ($year > 0) + $sql.= " AND date_format(p.datep, '%Y-%m') = '".$year."-".$month."'"; + else + $sql.= " AND date_format(p.datep, '%m') = '".$month."'"; +} +else if ($year > 0) +{ + $sql.= " AND date_format(p.datep, '%Y') = '".$year."'"; +} +if ($search_user > 0) +{ + $sql.= " AND c.fk_c_type_contact = tc.rowid AND tc.element='propal' AND tc.source='internal' AND c.element_id = p.rowid AND c.fk_socpeople = ".$search_user; +} + + +$sql.= ' ORDER BY '.$sortfield.' '.$sortorder.', p.ref DESC'; +$sql.= $db->plimit($limit + 1,$offset); +$result=$db->query($sql); + +if ($result) +{ + $objectstatic=new Propal($db); + $userstatic=new User($db); + + $num = $db->num_rows($result); + + if ($socid) + { + $soc = new Societe($db); + $soc->fetch($socid); + } + + $param='&socid='.$socid.'&viewstatut='.$viewstatut; + if ($month) $param.='&month='.$month; + if ($year) $param.='&year='.$year; + print_barre_liste($langs->trans('ListOfProposals').' '.($socid?'- '.$soc->nom:''), $page, $_SERVER["PHP_SELF"],$param,$sortfield,$sortorder,'',$num); + + // Lignes des champs de filtre + print '<form method="GET" action="'.$_SERVER["PHP_SELF"].'">'; + + $i = 0; + print '<table class="liste" width="100%">'; + // If the user can view prospects other than his' + if ($user->rights->societe->client->voir || $socid) + { + $moreforfilter.=$langs->trans('LinkedToSpecificUsers'). ': '; + $moreforfilter.=$form->select_dolusers($search_user,'search_user',1); + } + if ($moreforfilter) + { + print '<tr class="liste_titre">'; + print '<td class="liste_titre" colspan="9">'; + print $moreforfilter; + print '</td></tr>'; + } + + print '<tr class="liste_titre">'; + print_liste_field_titre($langs->trans('Ref'),$_SERVER["PHP_SELF"],'p.ref','',$param,'',$sortfield,$sortorder); + print_liste_field_titre($langs->trans('Company'),$_SERVER["PHP_SELF"],'s.nom','',$param,'',$sortfield,$sortorder); + print_liste_field_titre($langs->trans('RefCustomer'),$_SERVER["PHP_SELF"],'p.ref_client','',$param,'',$sortfield,$sortorder); + print_liste_field_titre($langs->trans('Date'),$_SERVER["PHP_SELF"],'p.datep','',$param, 'align="center"',$sortfield,$sortorder); + print_liste_field_titre($langs->trans('DateEndPropalShort'),$_SERVER["PHP_SELF"],'dfv','',$param, 'align="center"',$sortfield,$sortorder); + print_liste_field_titre($langs->trans('AmountHT'),$_SERVER["PHP_SELF"],'p.total_ht','',$param, 'align="right"',$sortfield,$sortorder); + print_liste_field_titre($langs->trans('Author'),$_SERVER["PHP_SELF"],'u.login','',$param,'align="right"',$sortfield,$sortorder); + print_liste_field_titre($langs->trans('Status'),$_SERVER["PHP_SELF"],'p.fk_statut','',$param,'align="right"',$sortfield,$sortorder); + print_liste_field_titre(''); + print "</tr>\n"; + + print '<tr class="liste_titre">'; + print '<td class="liste_titre">'; + print '<input class="flat" size="10" type="text" name="search_ref" value="'.$search_ref.'">'; + print '</td>'; + print '<td class="liste_titre" align="left">'; + print '<input class="flat" type="text" size="16" name="search_societe" value="'.$search_societe.'">'; + print '</td>'; + print '<td class="liste_titre">'; + print '<input class="flat" size="10" type="text" name="search_refcustomer" value="'.$search_refcustomer.'">'; + print '</td>'; + print '<td class="liste_titre" colspan="1" align="center">'; + print $langs->trans('Month').': <input class="flat" type="text" size="1" maxlength="2" name="month" value="'.$month.'">'; + print ' '.$langs->trans('Year').': '; + $syear = $year; + $formother->select_year($syear,'year',1, 20, 5); + print '</td>'; + print '<td class="liste_titre" colspan="1"> </td>'; + print '<td class="liste_titre" align="right">'; + print '<input class="flat" type="text" size="10" name="search_montant_ht" value="'.$search_montant_ht.'">'; + print '</td>'; + print '<td class="liste_titre"> </td>'; + print '<td class="liste_titre" align="right">'; + $formpropal->select_propal_statut($viewstatut,1); + print '</td>'; + print '<td class="liste_titre" align="right"><input class="liste_titre" type="image" src="'.DOL_URL_ROOT.'/theme/'.$conf->theme.'/img/search.png" value="'.dol_escape_htmltag($langs->trans("Search")).'" title="'.dol_escape_htmltag($langs->trans("Search")).'">'; + print '</td>'; + print "</tr>\n"; + + $var=true; + + while ($i < min($num,$limit)) + { + $objp = $db->fetch_object($result); + $now = time(); + $var=!$var; + print '<tr '.$bc[$var].'>'; + print '<td nowrap="nowrap">'; + + $objectstatic->id=$objp->propalid; + $objectstatic->ref=$objp->ref; + + print '<table class="nobordernopadding"><tr class="nocellnopadd">'; + print '<td class="nobordernopadding" nowrap="nowrap">'; + print $objectstatic->getNomUrl(1); + print '</td>'; + + print '<td width="20" class="nobordernopadding" nowrap="nowrap">'; + if ($objp->fk_statut == 1 && $objp->dfv < ($now - $conf->propal->cloture->warning_delay)) print img_warning($langs->trans("Late")); + print '</td>'; + + print '<td width="16" align="right" class="nobordernopadding">'; + $filename=dol_sanitizeFileName($objp->ref); + $filedir=$conf->propal->dir_output . '/' . dol_sanitizeFileName($objp->ref); + $urlsource=$_SERVER['PHP_SELF'].'?id='.$objp->propalid; + $formfile->show_documents('propal',$filename,$filedir,$urlsource,'','','',1,'',1); + print '</td></tr></table>'; + + if ($objp->client == 1) + { + $url = DOL_URL_ROOT.'/comm/fiche.php?socid='.$objp->rowid; + } + else + { + $url = DOL_URL_ROOT.'/comm/prospect/fiche.php?socid='.$objp->rowid; + } + + // Company + $companystatic->id=$objp->rowid; + $companystatic->nom=$objp->nom; + $companystatic->client=$objp->client; + print '<td>'; + print $companystatic->getNomUrl(1,'customer'); + print '</td>'; + + // Customer ref + print '<td nowrap="nowrap">'; + print $objp->ref_client; + print '</td>'; + + // Date propale + print '<td align="center">'; + $y = dol_print_date($db->jdate($objp->dp),'%Y'); + $m = dol_print_date($db->jdate($objp->dp),'%m'); + $mt= dol_print_date($db->jdate($objp->dp),'%b'); + $d = dol_print_date($db->jdate($objp->dp),'%d'); + print $d."\n"; + print ' <a href="'.$_SERVER["PHP_SELF"].'?year='.$y.'&month='.$m.'">'; + print $mt."</a>\n"; + print ' <a href="'.$_SERVER["PHP_SELF"].'?year='.$y.'">'; + print $y."</a></td>\n"; + + // Date fin validite + if ($objp->dfv) + { + print '<td align="center">'.dol_print_date($db->jdate($objp->dfv),'day'); + print '</td>'; + } + else + { + print '<td> </td>'; + } + + print '<td align="right">'.price($objp->total_ht)."</td>\n"; + + $userstatic->id=$objp->fk_user_author; + $userstatic->login=$objp->login; + print '<td align="center">'; + if ($userstatic->id) print $userstatic->getLoginUrl(1); + else print ' '; + print "</td>\n"; + + print '<td align="right">'.$objectstatic->LibStatut($objp->fk_statut,5)."</td>\n"; + + print '<td> </td>'; + + print "</tr>\n"; + + $total = $total + $objp->total_ht; + $subtotal = $subtotal + $objp->total_ht; + + $i++; + } + print '</table>'; + + print '</form>'; + + $db->free($result); +} +else +{ + dol_print_error($db); +} + +// End of page +llxFooter(); +$db->close(); +?> diff --git a/htdocs/comm/propal/note.php b/htdocs/comm/propal/note.php index fde8d2411d31767d5f2f89e34b392633caa42845..d7d88029062d0dc61e72a116c7868ee4ec937fc5 100644 --- a/htdocs/comm/propal/note.php +++ b/htdocs/comm/propal/note.php @@ -86,7 +86,7 @@ if ($id > 0 || ! empty($ref)) print '<table class="border" width="100%">'; - $linkback="<a href=\"".DOL_URL_ROOT.'/comm/propal.php'."?page=$page&socid=$socid&viewstatut=$viewstatut&sortfield=$sortfield&$sortorder\">".$langs->trans("BackToList")."</a>"; + $linkback="<a href=\"".DOL_URL_ROOT.'/comm/propal/list.php'."?page=$page&socid=$socid&viewstatut=$viewstatut&sortfield=$sortfield&$sortorder\">".$langs->trans("BackToList")."</a>"; // Ref print '<tr><td width="25%">'.$langs->trans('Ref').'</td><td colspan="3">'; diff --git a/htdocs/core/menus/standard/eldy.lib.php b/htdocs/core/menus/standard/eldy.lib.php index 818d6d902f8e51fc252a406e9a76907ade6b9e17..e12636725af53f217e8ad8e0fdcd5eb2e1fb0e15 100644 --- a/htdocs/core/menus/standard/eldy.lib.php +++ b/htdocs/core/menus/standard/eldy.lib.php @@ -826,13 +826,13 @@ function print_left_eldy_menu($db,$menu_array_before,$menu_array_after) $langs->load("propal"); $newmenu->add("/comm/propal/index.php?leftmenu=propals", $langs->trans("Prop"), 0, $user->rights->propale->lire, '', $mainmenu, 'propals'); $newmenu->add("/societe/societe.php?leftmenu=propals", $langs->trans("NewPropal"), 1, $user->rights->propale->creer); - $newmenu->add("/comm/propal.php?leftmenu=propals", $langs->trans("List"), 1, $user->rights->propale->lire); - if ($leftmenu=="propals") $newmenu->add("/comm/propal.php?leftmenu=propals&viewstatut=0", $langs->trans("PropalsDraft"), 2, $user->rights->propale->lire); - if ($leftmenu=="propals") $newmenu->add("/comm/propal.php?leftmenu=propals&viewstatut=1", $langs->trans("PropalsOpened"), 2, $user->rights->propale->lire); - if ($leftmenu=="propals") $newmenu->add("/comm/propal.php?leftmenu=propals&viewstatut=2", $langs->trans("PropalStatusSigned"), 2, $user->rights->propale->lire); - if ($leftmenu=="propals") $newmenu->add("/comm/propal.php?leftmenu=propals&viewstatut=3", $langs->trans("PropalStatusNotSigned"), 2, $user->rights->propale->lire); - if ($leftmenu=="propals") $newmenu->add("/comm/propal.php?leftmenu=propals&viewstatut=4", $langs->trans("PropalStatusBilled"), 2, $user->rights->propale->lire); - //if ($leftmenu=="propals") $newmenu->add("/comm/propal.php?leftmenu=propals&viewstatut=2,3,4", $langs->trans("PropalStatusClosedShort"), 2, $user->rights->propale->lire); + $newmenu->add("/comm/propal/list.php?leftmenu=propals", $langs->trans("List"), 1, $user->rights->propale->lire); + if ($leftmenu=="propals") $newmenu->add("/comm/propal/list.php?leftmenu=propals&viewstatut=0", $langs->trans("PropalsDraft"), 2, $user->rights->propale->lire); + if ($leftmenu=="propals") $newmenu->add("/comm/propal/list.php?leftmenu=propals&viewstatut=1", $langs->trans("PropalsOpened"), 2, $user->rights->propale->lire); + if ($leftmenu=="propals") $newmenu->add("/comm/propal/list.php?leftmenu=propals&viewstatut=2", $langs->trans("PropalStatusSigned"), 2, $user->rights->propale->lire); + if ($leftmenu=="propals") $newmenu->add("/comm/propal/list.php?leftmenu=propals&viewstatut=3", $langs->trans("PropalStatusNotSigned"), 2, $user->rights->propale->lire); + if ($leftmenu=="propals") $newmenu->add("/comm/propal/list.php?leftmenu=propals&viewstatut=4", $langs->trans("PropalStatusBilled"), 2, $user->rights->propale->lire); + //if ($leftmenu=="propals") $newmenu->add("/comm/propal/list.php?leftmenu=propals&viewstatut=2,3,4", $langs->trans("PropalStatusClosedShort"), 2, $user->rights->propale->lire); $newmenu->add("/comm/propal/stats/index.php?leftmenu=propals", $langs->trans("Statistics"), 1, $user->rights->propale->lire); } diff --git a/htdocs/langs/en_US/main.lang b/htdocs/langs/en_US/main.lang index ee557fb9eb753379e0a8200c421212f726a6cc12..7af3740e054c208db9222f9db38b4ffce5d4d5fe 100644 --- a/htdocs/langs/en_US/main.lang +++ b/htdocs/langs/en_US/main.lang @@ -618,6 +618,7 @@ ByYear=By year ByMonth=by month ByDay=By day BySalesRepresentative=By sales representative +LinkedToSpecificUsers=Linked to a particular user contact # Week day Monday=Monday diff --git a/htdocs/langs/fr_FR/main.lang b/htdocs/langs/fr_FR/main.lang index 81484ba7c2ea119a936f086f6e951427ce0f037d..9c58ef9271bcab491119767b9cfbf87f1517058a 100644 --- a/htdocs/langs/fr_FR/main.lang +++ b/htdocs/langs/fr_FR/main.lang @@ -620,6 +620,7 @@ ByYear=Par année ByMonth=Par mois ByDay=Par jour BySalesRepresentative=Par commerciaux +LinkedToSpecificUsers=Liés à un contact utilisateur particulier # Week day Monday=Lundi