From 12fc4438cae5e02be71684a6ff9f32f66be0c4f5 Mon Sep 17 00:00:00 2001 From: Regis Houssin Date: Thu, 1 Jul 2010 07:10:41 +0000 Subject: [PATCH] Works on MVC model --- htdocs/comm/propal.php | 349 ++-------------------- htdocs/comm/propal/class/propal.class.php | 78 ++++- htdocs/lib/propal.lib.php | 311 +++++++++++++++++++ 3 files changed, 402 insertions(+), 336 deletions(-) diff --git a/htdocs/comm/propal.php b/htdocs/comm/propal.php index 21a65fa03b1..e2444501f7a 100644 --- a/htdocs/comm/propal.php +++ b/htdocs/comm/propal.php @@ -237,7 +237,7 @@ if ($_POST['action'] == 'addmilestone') if ($_POST['milestone_label'] == $langs->trans('Label') || $_POST['milestone_desc'] == $langs->trans('Description')) { $milestone_error++; - $mesg = '
'.$langs->trans("ErrorMilestone").'
'; + $mesg = '
'.$langs->trans("MilestoneFieldsIsRequired").'
'; } else { @@ -247,6 +247,19 @@ if ($_POST['action'] == 'addmilestone') $milestone->description = $_POST['milestone_desc']; $milestone->elementtype = $propal->element; $milestone->fk_element = $propal->id; + + $ret = $milestone->create($user); + + if ($ret < 0) + { + $milestone_error++; + $mesg = '
'.$milestone->error.'
'; + } + else + { + Header ('Location: '.$_SERVER["PHP_SELF"].'?id='.$propal->id); + exit; + } } } @@ -1003,8 +1016,6 @@ if ($id > 0 || ! empty($ref)) if ($mesg) print $mesg."
"; - $product_static=new Product($db); - $propal = new Propal($db); $propal->fetch($id,$ref); @@ -1395,332 +1406,10 @@ if ($id > 0 || ! empty($ref)) * Lines */ print ''; - - $sql = 'SELECT pt.rowid, pt.description, pt.fk_product, pt.fk_remise_except,'; - $sql.= ' pt.qty, pt.tva_tx, pt.remise_percent, pt.subprice, pt.info_bits,'; - $sql.= ' pt.total_ht, pt.total_tva, pt.total_ttc, pt.marge_tx, pt.marque_tx, pt.pa_ht, pt.special_code,'; - $sql.= ' pt.date_start,'; - $sql.= ' pt.date_end,'; - $sql.= ' pt.product_type,'; - $sql.= ' p.label as product_label, p.ref, p.fk_product_type, p.rowid as prodid,'; - $sql.= ' p.description as product_desc'; - $sql.= ' FROM '.MAIN_DB_PREFIX.'propaldet as pt'; - $sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'product as p ON pt.fk_product=p.rowid'; - $sql.= ' WHERE pt.fk_propal = '.$propal->id; - $sql.= ' ORDER BY pt.rang ASC, pt.rowid'; - $resql = $db->query($sql); - if ($resql) - { - $num = $db->num_rows($resql); - $i = 0; - - if ($num) - { - print ''; - print ''; - if ($conf->global->PRODUIT_USE_MARKUP) - { - print ''; - } - print ''; - print ''; - print ''; - print ''; - print ''; - print ''; - print "\n"; - } - $var=true; - while ($i < $num) - { - $objp = $db->fetch_object($resql); - $var=!$var; - - // Show product and description - $type=$objp->product_type?$objp->product_type:$objp->fk_product_type; - // Try to enhance type detection using date_start and date_end for free lines where type - // was not saved. - if (! empty($objp->date_start)) $type=1; - if (! empty($objp->date_end)) $type=1; - - // Ligne en mode visu - if ($_GET['action'] != 'editline' || $_GET['lineid'] != $objp->rowid) - { - print ''; - - // Produit - if ($objp->fk_product > 0) - { - print ''; - } - else - { - print '\n"; - } - - if ($conf->global->PRODUIT_USE_MARKUP && $conf->use_javascript_ajax) - { - $formMarkup = ''."\n"; - $formMarkup.= ''."\n"; - $formMarkup.= '
'.$langs->trans('Description').''.$langs->trans('Markup').''.$langs->trans('VAT').''.$langs->trans('PriceUHT').''.$langs->trans('Qty').''.$langs->trans('ReductionShort').''.$langs->trans('TotalHTShort').' 
'; - print ''; // ancre pour retourner sur la ligne; - - // Show product and description - $product_static->type=$objp->fk_product_type; - $product_static->id=$objp->fk_product; - $product_static->ref=$objp->ref; - $product_static->libelle=$objp->product_label; - $text=$product_static->getNomUrl(1); - $text.= ' - '.$objp->product_label; - $description=($conf->global->PRODUIT_DESC_IN_FORM?'':dol_htmlentitiesbr($objp->description)); - print $html->textwithtooltip($text,$description,3,'','',$i); - - // Show range - print_date_range($db->jdate($objp->date_start),$db->jdate($objp->date_end)); - - // Add description in form - if ($conf->global->PRODUIT_DESC_IN_FORM) - { - print ($objp->description && $objp->description!=$objp->product_label)?'
'.dol_htmlentitiesbr($objp->description):''; - } - - print '
'; - print ''; // ancre pour retourner sur la ligne - if (($objp->info_bits & 2) == 2) - { - print ''; - print img_object($langs->trans("ShowReduc"),'reduc').' '.$langs->trans("Discount"); - print ''; - if ($objp->description) - { - if ($objp->description == '(CREDIT_NOTE)') - { - $discount=new DiscountAbsolute($db); - $discount->fetch($objp->fk_remise_except); - print ' - '.$langs->transnoentities("DiscountFromCreditNote",$discount->getNomUrl(0)); - } - else - { - print ' - '.nl2br($objp->description); - } - } - } - else - { - if ($type==1) $text = img_object($langs->trans('Service'),'service'); - else $text = img_object($langs->trans('Product'),'product'); - print $text.' '.nl2br($objp->description); - - // Show range - print_date_range($db->jdate($objp->date_start),$db->jdate($objp->date_end)); - } - print "
'."\n"; - if ($objp->fk_product > 0) - { - $formMarkup.= ''."\n"; - $formMarkup.= ''."\n"; - $formMarkup.= ''."\n"; - } - $formMarkup.= ''."\n"; - $formMarkup.= ''."\n"; - $formMarkup.= ''."\n"; - $formMarkup.= ''."\n"; - $formMarkup.= ''."\n"; - $formMarkup.= ''."\n"; - //$formMarkup.= ''."\n"; - $formMarkup.= ''."\n"; - $formMarkup.= ''."\n"; - $formMarkup.= ''."\n"; - $formMarkup.= '
 
 '.$langs->trans('SupplierPrice').''.$html->select_product_fourn_price($objp->fk_product,'productfournpriceid').'
 
 '.$langs->trans('PurchasePrice').' '.$langs->trans('HT').'
 '.$langs->trans('MarkupRate').'
 '.$langs->trans('SellingPrice').' '.$langs->trans('HT').'
 '.$langs->trans('CashFlow').' '.$langs->trans('HT').'
'."\n"; - $formMarkup.= ''."\n"; - //$formMarkup.= '   '."\n"; - $formMarkup.= '
'."\n"; - $formMarkup.= ajax_updaterWithID("rate".$i,"markup","sellingprice_ht".$i,DOL_URL_ROOT."/product/ajaxproducts.php","&count=".$i,"working")."\n"; - - - print ''."\n"; - - print ''."\n"; - - - print ''; - print ''; - print ''; - print '
'; - if (($objp->info_bits & 2) == 2) - { - // Ligne remise predefinie, on ne permet pas modif - } - else - { - $picto = ''; - $picto.= img_picto($langs->trans("Calculate"),'calc.png'); - $picto.= ''; - print $html->textwithtooltip($picto,$langs->trans("ToCalculateMarkup"),3,'','',$i); - } - print ''.vatrate($objp->marge_tx).'%
'; - print ''; - } - - // VAT Rate - print ''.vatrate($objp->tva_tx,'%',$objp->info_bits).''; - - // U.P HT - print ''.price($objp->subprice)."\n"; - - // Qty - print ''; - if ((($objp->info_bits & 2) != 2) && $objp->special_code != 3) - { - print $objp->qty; - } - else print ' '; - print ''; - - // Remise percent (negative or positive) - if (!empty($objp->remise_percent) && $objp->special_code != 3) - { - print ''.dol_print_reduction($objp->remise_percent,$langs)."\n"; - } - else - { - print ' '; - } - - // Montant total HT - if ($objp->special_code == 3) - { - // Si ligne en option - print ''.$langs->trans('Option').''; - } - else - { - print ''.price($objp->total_ht)."\n"; - } - - // Icone d'edition et suppression - if ($propal->statut == 0 && $user->rights->propale->creer) - { - print ''; - if (($objp->info_bits & 2) == 2) - { - // Ligne remise predefinie, on permet pas modif - } - else - { - print 'rowid.'#'.$objp->rowid.'">'; - print img_edit(); - print ''; - } - print ''; - print ''; - print 'rowid.'">'; - print img_delete(); - print ''; - if ($num > 1) - { - print ''; - if ($i > 0) - { - print 'rowid.'">'; - print img_up(); - print ''; - } - if ($i < $num-1) - { - print 'rowid.'">'; - print img_down(); - print ''; - } - print ''; - } - } - else - { - print ' '; - } - - print ''; - } - - // Ligne en mode update - if ($propal->statut == 0 && $_GET["action"] == 'editline' && $user->rights->propale->creer && $_GET["lineid"] == $objp->rowid) - { - print '
rowid.'" method="POST">'; - print ''; - print ''; - print ''; - print ''; - print ''; - print ''; - print ''; // ancre pour retourner sur la ligne - if ($objp->fk_product > 0) - { - print ''; - print ''; - if ($objp->fk_product_type==1) print img_object($langs->trans('ShowService'),'service'); - else print img_object($langs->trans('ShowProduct'),'product'); - print ' '.$objp->ref.''; - print ' - '.nl2br($objp->product_label); - print '
'; - } - if ($_GET["action"] == 'editline') - { - // editeur wysiwyg - if ($conf->fckeditor->enabled && $conf->global->FCKEDITOR_ENABLE_DETAILS) - { - require_once(DOL_DOCUMENT_ROOT."/lib/doleditor.class.php"); - $doleditor=new DolEditor('desc',$objp->description,164,'dolibarr_details'); - $doleditor->Create(); - } - else - { - $nbrows=ROWS_2; - if (! empty($conf->global->MAIN_INPUT_DESC_HEIGHT)) $nbrows=$conf->global->MAIN_INPUT_DESC_HEIGHT; - print ''; - } - } - print ''; - if ($conf->global->PRODUIT_USE_MARKUP) - { - print ''.vatrate($objp->marge_tx).'%'; - } - print ''; - print $html->select_tva('tva_tx',$objp->tva_tx,$mysoc,$societe,'',$objp->info_bits); - print ''; - print ''; - print ''; - if (($objp->info_bits & 2) != 2) - { - print ''; - } - else print ' '; - print ''; - print ''; - if (($objp->info_bits & 2) != 2) - { - print '%'; - } - else print ' '; - print ''; - print ''; - print '
'; - print '' . "\n"; - - print "
\n"; - } - - $i++; - } - - $db->free($resql); - } - else - { - dol_print_error($db); - } + + // Show lines + $lines = $propal->getLinesArray(); + if (! empty($lines) ) print_lines($propal, $lines); /* * Form to add new line @@ -1730,7 +1419,7 @@ if ($id > 0 || ! empty($ref)) $var=true; if ($conf->milestone->enabled) - { + { formAddMilestone($propal); $var=!$var; diff --git a/htdocs/comm/propal/class/propal.class.php b/htdocs/comm/propal/class/propal.class.php index 0b11aa75145..6138f1c11e5 100644 --- a/htdocs/comm/propal/class/propal.class.php +++ b/htdocs/comm/propal/class/propal.class.php @@ -2114,12 +2114,12 @@ class Propal extends CommonObject } /** - \brief Renvoie nom clicable (avec eventuellement le picto) - \param withpicto 0=Pas de picto, 1=Inclut le picto dans le lien, 2=Picto seul - \param option Sur quoi pointe le lien - \param get_params Parametres added to url - \return string Chaine avec URL - */ + * \brief Renvoie nom clicable (avec eventuellement le picto) + * \param withpicto 0=Pas de picto, 1=Inclut le picto dans le lien, 2=Picto seul + * \param option Sur quoi pointe le lien + * \param get_params Parametres added to url + * \return string Chaine avec URL + */ function getNomUrl($withpicto=0,$option='', $get_params='') { global $langs; @@ -2147,6 +2147,72 @@ class Propal extends CommonObject $result.=$lien.$this->ref.$lienfin; return $result; } + + /** + * \brief Return an array of propal lines + */ + function getLinesArray() + { + $lines = array(); + + $sql = 'SELECT pt.rowid, pt.description, pt.fk_product, pt.fk_remise_except,'; + $sql.= ' pt.qty, pt.tva_tx, pt.remise_percent, pt.subprice, pt.info_bits,'; + $sql.= ' pt.total_ht, pt.total_tva, pt.total_ttc, pt.marge_tx, pt.marque_tx, pt.pa_ht, pt.special_code,'; + $sql.= ' pt.date_start,'; + $sql.= ' pt.date_end,'; + $sql.= ' pt.product_type,'; + $sql.= ' p.label as product_label, p.ref, p.fk_product_type, p.rowid as prodid,'; + $sql.= ' p.description as product_desc'; + $sql.= ' FROM '.MAIN_DB_PREFIX.'propaldet as pt'; + $sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'product as p ON pt.fk_product=p.rowid'; + $sql.= ' WHERE pt.fk_propal = '.$this->id; + $sql.= ' ORDER BY pt.rang ASC, pt.rowid'; + + $resql = $this->db->query($sql); + if ($resql) + { + $num = $this->db->num_rows($resql); + $i = 0; + + while ($i < $num) + { + $obj = $this->db->fetch_object($resql); + + $lines[$i]->id = $obj->rowid; + $lines[$i]->description = $obj->description; + $lines[$i]->fk_product = $obj->fk_product; + $lines[$i]->ref = $obj->ref; + $lines[$i]->product_label = $obj->product_label; + $lines[$i]->product_desc = $obj->product_desc; + $lines[$i]->fk_product_type = $obj->fk_product_type; + $lines[$i]->product_type = $obj->product_type; + $lines[$i]->qty = $obj->qty; + $lines[$i]->subprice = $obj->subprice; + $lines[$i]->pa_ht = $obj->pa_ht; + $lines[$i]->fk_remise_except = $obj->fk_remise_except; + $lines[$i]->remise_percent = $obj->remise_percent; + $lines[$i]->tva_tx = $obj->tva_tx; + $lines[$i]->info_bits = $obj->info_bits; + $lines[$i]->total_ht = $obj->total_ht; + $lines[$i]->total_tva = $obj->total_tva; + $lines[$i]->total_ttc = $obj->total_ttc; + $lines[$i]->marge_tx = $obj->marge_tx; + $lines[$i]->marque_tx = $obj->marque_tx; + $lines[$i]->special_code = $obj->special_code; + $lines[$i]->date_start = $this->db->jdate($obj->date_start); + $lines[$i]->date_end = $this->db->jdate($obj->date_end); + + $i++; + } + $this->db->free($resql); + } + else + { + dol_print_error($this->db); + } + + return $lines; + } } diff --git a/htdocs/lib/propal.lib.php b/htdocs/lib/propal.lib.php index be5abfd50e9..5f7e2260ec5 100644 --- a/htdocs/lib/propal.lib.php +++ b/htdocs/lib/propal.lib.php @@ -110,4 +110,315 @@ function propal_prepare_head($propal) return $head; } +/** + * \brief Return HTML table with list of propal lines + * \param propal Object propal + * \param lines Array of propal lines + */ +function print_lines($propal,$lines) +{ + global $db; + global $conf,$langs,$user; + global $html,$bc; + + $product_static = new Product($db); + + print ''; + print ''.$langs->trans('Description').''; + if ($conf->global->PRODUIT_USE_MARKUP) print ''.$langs->trans('Markup').''; + print ''.$langs->trans('VAT').''; + print ''.$langs->trans('PriceUHT').''; + print ''.$langs->trans('Qty').''; + print ''.$langs->trans('ReductionShort').''; + print ''.$langs->trans('TotalHTShort').''; + print ' '; + print "\n"; + + $num = count($lines); + $var = true; + $i = 0; + + foreach ($lines as $line) + { + $var=!$var; + + // Show product and description + $type=$line->product_type?$line->product_type:$line->fk_product_type; + // Try to enhance type detection using date_start and date_end for free lines where type + // was not saved. + if (! empty($line->date_start)) $type=1; + if (! empty($line->date_end)) $type=1; + + // Ligne en mode visu + if ($_GET['action'] != 'editline' || $_GET['lineid'] != $line->id) + { + print ''; + + // Produit + if ($line->fk_product > 0) + { + print ''; + print ''; // ancre pour retourner sur la ligne; + + // Show product and description + $product_static->type=$line->fk_product_type; + $product_static->id=$line->fk_product; + $product_static->ref=$line->ref; + $product_static->libelle=$line->product_label; + $text=$product_static->getNomUrl(1); + $text.= ' - '.$line->product_label; + $description=($conf->global->PRODUIT_DESC_IN_FORM?'':dol_htmlentitiesbr($line->description)); + print $html->textwithtooltip($text,$description,3,'','',$i); + + // Show range + print_date_range($line->date_start, $line->date_end); + + // Add description in form + if ($conf->global->PRODUIT_DESC_IN_FORM) + { + print ($line->description && $line->description!=$line->product_label)?'
'.dol_htmlentitiesbr($line->description):''; + } + + print ''; + } + else + { + print ''; + print ''; // ancre pour retourner sur la ligne + if (($line->info_bits & 2) == 2) + { + print ''; + print img_object($langs->trans("ShowReduc"),'reduc').' '.$langs->trans("Discount"); + print ''; + if ($line->description) + { + if ($line->description == '(CREDIT_NOTE)') + { + $discount=new DiscountAbsolute($db); + $discount->fetch($line->fk_remise_except); + print ' - '.$langs->transnoentities("DiscountFromCreditNote",$discount->getNomUrl(0)); + } + else + { + print ' - '.nl2br($line->description); + } + } + } + else + { + if ($type==1) $text = img_object($langs->trans('Service'),'service'); + else $text = img_object($langs->trans('Product'),'product'); + print $text.' '.nl2br($line->description); + + // Show range + print_date_range($db->jdate($line->date_start),$db->jdate($line->date_end)); + } + print "\n"; + } + + if ($conf->global->PRODUIT_USE_MARKUP && $conf->use_javascript_ajax) + { + // TODO a déplacer dans classe module marge + $formMarkup = '
'."\n"; + $formMarkup.= ''."\n"; + $formMarkup.= ''."\n"; + if ($objp->fk_product > 0) + { + $formMarkup.= ''."\n"; + $formMarkup.= ''."\n"; + $formMarkup.= ''."\n"; + } + $formMarkup.= ''."\n"; + $formMarkup.= ''."\n"; + $formMarkup.= ''."\n"; + $formMarkup.= ''."\n"; + $formMarkup.= ''."\n"; + $formMarkup.= ''."\n"; + //$formMarkup.= ''."\n"; + $formMarkup.= ''."\n"; + $formMarkup.= ''."\n"; + $formMarkup.= ''."\n"; + $formMarkup.= '
 
 '.$langs->trans('SupplierPrice').''.$html->select_product_fourn_price($line->fk_product,'productfournpriceid').'
 
 '.$langs->trans('PurchasePrice').' '.$langs->trans('HT').'
 '.$langs->trans('MarkupRate').'
 '.$langs->trans('SellingPrice').' '.$langs->trans('HT').'
 '.$langs->trans('CashFlow').' '.$langs->trans('HT').'
'."\n"; + $formMarkup.= ''."\n"; + //$formMarkup.= '   '."\n"; + $formMarkup.= '
'."\n"; + $formMarkup.= ajax_updaterWithID("rate".$i,"markup","sellingprice_ht".$i,DOL_URL_ROOT."/product/ajaxproducts.php","&count=".$i,"working")."\n"; + + + print ''."\n"; + + print ''."\n"; + + print ''; + print ''; + print ''; + print '
'; + if (($objp->info_bits & 2) == 2) + { + // Ligne remise predefinie, on ne permet pas modif + } + else + { + $picto = ''; + $picto.= img_picto($langs->trans("Calculate"),'calc.png'); + $picto.= ''; + print $html->textwithtooltip($picto,$langs->trans("ToCalculateMarkup"),3,'','',$i); + } + print ''.vatrate($line->marge_tx).'%
'; + print ''; + } + + // VAT Rate + print ''.vatrate($line->tva_tx,'%',$line->info_bits).''; + + // U.P HT + print ''.price($line->subprice)."\n"; + + // Qty + print ''; + if ((($line->info_bits & 2) != 2) && $line->special_code != 3) + { + print $line->qty; + } + else print ' '; + print ''; + + // Remise percent (negative or positive) + if (!empty($line->remise_percent) && $line->special_code != 3) + { + print ''.dol_print_reduction($line->remise_percent,$langs)."\n"; + } + else + { + print ' '; + } + + // Montant total HT + if ($line->special_code == 3) + { + // Si ligne en option + print ''.$langs->trans('Option').''; + } + else + { + print ''.price($line->total_ht)."\n"; + } + + // Icone d'edition et suppression + if ($propal->statut == 0 && $user->rights->propale->creer) + { + print ''; + if (($line->info_bits & 2) == 2) + { + // Ligne remise predefinie, on permet pas modif + } + else + { + print 'id.'#'.$line->id.'">'; + print img_edit(); + print ''; + } + print ''; + print ''; + print 'id.'">'; + print img_delete(); + print ''; + if ($num > 1) + { + print ''; + if ($i > 0) + { + print 'id.'">'; + print img_up(); + print ''; + } + if ($i < $num-1) + { + print 'id.'">'; + print img_down(); + print ''; + } + print ''; + } + } + else + { + print ' '; + } + + print ''; + } + + // Ligne en mode update + if ($propal->statut == 0 && $_GET["action"] == 'editline' && $user->rights->propale->creer && $_GET["lineid"] == $line->id) + { + print '
id.'" method="POST">'; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; // ancre pour retourner sur la ligne + if ($line->fk_product > 0) + { + print ''; + print ''; + if ($line->fk_product_type==1) print img_object($langs->trans('ShowService'),'service'); + else print img_object($langs->trans('ShowProduct'),'product'); + print ' '.$line->ref.''; + print ' - '.nl2br($line->product_label); + print '
'; + } + if ($_GET["action"] == 'editline') + { + // editeur wysiwyg + if ($conf->fckeditor->enabled && $conf->global->FCKEDITOR_ENABLE_DETAILS) + { + require_once(DOL_DOCUMENT_ROOT."/lib/doleditor.class.php"); + $doleditor=new DolEditor('desc',$line->description,164,'dolibarr_details'); + $doleditor->Create(); + } + else + { + $nbrows=ROWS_2; + if (! empty($conf->global->MAIN_INPUT_DESC_HEIGHT)) $nbrows=$conf->global->MAIN_INPUT_DESC_HEIGHT; + print ''; + } + } + print ''; + if ($conf->global->PRODUIT_USE_MARKUP) + { + print ''.vatrate($line->marge_tx).'%'; + } + print ''; + print $html->select_tva('tva_tx',$line->tva_tx,$mysoc,$societe,'',$line->info_bits); + print ''; + print ''; + print ''; + if (($line->info_bits & 2) != 2) + { + print ''; + } + else print ' '; + print ''; + print ''; + if (($line->info_bits & 2) != 2) + { + print '%'; + } + else print ' '; + print ''; + print ''; + print '
'; + print '' . "\n"; + + print "
\n"; + } + $i++; + } +} + ?> \ No newline at end of file