FIX #12320 It is clearer that you can't change thirdparty when creating

invoice from template with a recurring rule.
This commit is contained in:
Laurent Destailleur 2019-11-05 15:46:48 +01:00
parent 85ce5176b5
commit 17d5c385ff
2 changed files with 30 additions and 17 deletions

View File

@ -1151,7 +1151,7 @@ if (empty($reshook))
}
// Standard invoice or Deposit invoice, created from a Predefined template invoice
if (($_POST['type'] == Facture::TYPE_STANDARD || $_POST['type'] == Facture::TYPE_DEPOSIT) && GETPOST('fac_rec') > 0)
if (($_POST['type'] == Facture::TYPE_STANDARD || $_POST['type'] == Facture::TYPE_DEPOSIT) && GETPOST('fac_rec', 'int') > 0)
{
$dateinvoice = dol_mktime(12, 0, 0, $_POST['remonth'], $_POST['reday'], $_POST['reyear']);
if (empty($dateinvoice))
@ -1661,6 +1661,7 @@ if (empty($reshook))
$object->date_pointoftax = $date_pointoftax;
$object->note_public = trim(GETPOST('note_public', 'none'));
$object->note = trim(GETPOST('note', 'none'));
$object->note_private = trim(GETPOST('note', 'none'));
$object->ref_client = GETPOST('ref_client', 'alpha');
$object->ref_int = GETPOST('ref_int', 'alpha');
$object->modelpdf = GETPOST('model', 'alpha');
@ -2752,10 +2753,18 @@ if ($action == 'create')
// Ref
print '<tr><td class="titlefieldcreate fieldrequired">' . $langs->trans('Ref') . '</td><td colspan="2">' . $langs->trans('Draft') . '</td></tr>';
// Thirdparty
print '<td class="fieldrequired">' . $langs->trans('Customer') . '</td>';
if ($soc->id > 0 && ! GETPOST('fac_rec', 'int'))
$exampletemplateinvoice=new FactureRec($db);
$invoice_predefined = new FactureRec($db);
if (empty($origin) && empty($originid) && GETPOST('fac_rec', 'int') > 0)
{
$invoice_predefined->fetch(GETPOST('fac_rec', 'int'));
}
// Thirdparty
if ($soc->id > 0 && (! GETPOST('fac_rec', 'int') || ! empty($invoice_predefined->frequency)))
{
// If thirdparty known and not a predefined invoiced without a recurring rule
print '<tr><td class="fieldrequired">' . $langs->trans('Customer') . '</td>';
print '<td colspan="2">';
print $soc->getNomUrl(1);
print '<input type="hidden" name="socid" value="' . $soc->id . '">';
@ -2771,9 +2780,11 @@ if ($action == 'create')
}
print ')';
print '</td>';
print '</tr>' . "\n";
}
else
{
print '<tr><td class="fieldrequired">' . $langs->trans('Customer') . '</td>';
print '<td colspan="2">';
print $form->select_company($soc->id, 'socid', '((s.client = 1 OR s.client = 3) AND s.status=1)', 'SelectThirdParty', 0, 0, null, 0, 'minwidth300');
// Option to reload page to retrieve customer informations. Note, this clear other input
@ -2790,17 +2801,14 @@ if ($action == 'create')
});
</script>';
}
print ' <a href="'.DOL_URL_ROOT.'/societe/card.php?action=create&client=3&fournisseur=0&backtopage='.urlencode($_SERVER["PHP_SELF"].'?action=create').'"><span class="valignmiddle text-plus-circle">'.$langs->trans("AddThirdParty").'</span><span class="fa fa-plus-circle valignmiddle paddingleft"></span></a>';
if (! GETPOST('fac_rec', 'int')) print ' <a href="'.DOL_URL_ROOT.'/societe/card.php?action=create&client=3&fournisseur=0&backtopage='.urlencode($_SERVER["PHP_SELF"].'?action=create').'"><span class="valignmiddle text-plus-circle">'.$langs->trans("AddThirdParty").'</span><span class="fa fa-plus-circle valignmiddle paddingleft"></span></a>';
print '</td>';
print '</tr>' . "\n";
}
print '</tr>' . "\n";
$exampletemplateinvoice=new FactureRec($db);
// Overwrite some values if creation of invoice is from a predefined invoice
if (empty($origin) && empty($originid) && GETPOST('fac_rec', 'int') > 0)
{
$invoice_predefined = new FactureRec($db);
$invoice_predefined->fetch(GETPOST('fac_rec', 'int'));
$dateinvoice = $invoice_predefined->date_when; // To use next gen date by default later
@ -2827,13 +2835,14 @@ if ($action == 'create')
if ($num > 0)
{
print '<tr><td>' . $langs->trans('CreateFromRepeatableInvoice') . '</td><td>';
print '<select class="flat" id="fac_rec" name="fac_rec">';
//print '<input type="hidden" name="fac_rec" id="fac_rec" value="'.GETPOST('fac_rec', 'int').'">';
print '<select class="flat" id="fac_rec" name="fac_rec">'; // We may want to change the template to use
print '<option value="0" selected></option>';
while ($i < $num)
{
$objp = $db->fetch_object($resql);
print '<option value="' . $objp->rowid . '"';
if (GETPOST('fac_rec') == $objp->rowid)
if (GETPOST('fac_rec', 'int') == $objp->rowid)
{
print ' selected';
$exampletemplateinvoice->fetch(GETPOST('fac_rec', 'int'));
@ -2848,6 +2857,7 @@ if ($action == 'create')
print '<script type="text/javascript">
$(document).ready(function() {
$("#fac_rec").change(function() {
console.log("We changed the template invoice");
var fac_rec = $(this).val();
var socid = $(\'#socid\').val();
// reload page
@ -2965,7 +2975,7 @@ if ($action == 'create')
print '<!-- replacement line -->';
print '<div class="tagtr listofinvoicetype"><div class="tagtd listofinvoicetype">';
$tmp='<input type="radio" name="type" id="radio_replacement" value="1"' . (GETPOST('type') == 1 ? ' checked' : '');
if (! $options) $tmp.=' disabled';
if (! $options || $invoice_predefined->id > 0) $tmp.=' disabled';
$tmp.='> ';
print '<script type="text/javascript" language="javascript">
jQuery(document).ready(function() {
@ -2976,7 +2986,7 @@ if ($action == 'create')
</script>';
$text = '<label>'.$tmp.$langs->trans("InvoiceReplacementAsk") . '</label>';
$text .= '<select class="flat" name="fac_replacement" id="fac_replacement"';
if (! $options)
if (! $options || $invoice_predefined->id > 0)
$text .= ' disabled';
$text .= '>';
if ($options) {
@ -3057,7 +3067,7 @@ if ($action == 'create')
print '<div class="tagtr listofinvoicetype"><div class="tagtd listofinvoicetype">';
$tmp='<input type="radio" id="radio_creditnote" name="type" value="2"' . (GETPOST('type') == 2 ? ' checked' : '');
if (! $optionsav && empty($conf->global->INVOICE_CREDIT_NOTE_STANDALONE)) $tmp.=' disabled';
if ((! $optionsav && empty($conf->global->INVOICE_CREDIT_NOTE_STANDALONE)) || $invoice_predefined->id > 0) $tmp.=' disabled';
$tmp.= '> ';
// Show credit note options only if we checked credit note
print '<script type="text/javascript" language="javascript">
@ -3077,7 +3087,7 @@ if ($action == 'create')
$text = '<label>'.$tmp.$langs->transnoentities("InvoiceAvoirAsk") . '</label> ';
// $text.='<input type="text" value="">';
$text .= '<select class="flat valignmiddle" name="fac_avoir" id="fac_avoir"';
if (! $optionsav)
if (! $optionsav || $invoice_predefined->id > 0)
$text .= ' disabled';
$text .= '>';
if ($optionsav) {
@ -3355,7 +3365,7 @@ if ($action == 'create')
print '</td></tr>';
}
// Lines from source
// Lines from source (TODO Show them also when creating invoice from tempalte invoice)
if (! empty($origin) && ! empty($originid) && is_object($objectsrc))
{
// TODO for compatibility

View File

@ -370,7 +370,10 @@ class Facture extends CommonInvoice
$nextdatewhen=dol_time_plus_duree($originaldatewhen, $_facrec->frequency, $_facrec->unit_frequency);
$previousdaynextdatewhen=dol_time_plus_duree($nextdatewhen, -1, 'd');
$this->socid = $_facrec->socid; // Invoice created on same thirdparty than template
if (! empty($_facrec->frequency)) // Invoice are created on same thirdparty than template when there is a recurrence, but not necessarly when there is no recurrence.
{
$this->socid = $_facrec->socid;
}
$this->entity = $_facrec->entity; // Invoice created in same entity than template
// Fields coming from GUI (priority on template). TODO Value of template should be used as default value on GUI so we can use here always value from GUI