diff --git a/htdocs/adherents/card_subscriptions.php b/htdocs/adherents/card_subscriptions.php index fc8b9e78437..b3a159046b3 100644 --- a/htdocs/adherents/card_subscriptions.php +++ b/htdocs/adherents/card_subscriptions.php @@ -174,6 +174,7 @@ if ($user->rights->adherent->cotisation->creer && $_POST["action"] == 'cotisatio } } $invoice->socid=$adh->fk_soc; + $invoice->date=$datecotisation; $result=$invoice->create($user); if ($result <= 0) @@ -192,6 +193,16 @@ if ($user->rights->adherent->cotisation->creer && $_POST["action"] == 'cotisatio $errmsg=$invoice->error; $error++; } + + $result=$invoice->validate($user); + + if ($option == 'bankviainvoice') + { + // Now we add payment + // TODO + + + } } } @@ -280,6 +291,27 @@ if ($rowid) // Status print ''.$langs->trans("Status").''.$adh->getLibStatut(4).''; + // Date end subscription + // Date fin cotisation + print ''.$langs->trans("SubscriptionEndDate").''; + if ($adh->datefin) + { + if ($adh->datefin < time()) + { + print dol_print_date($adh->datefin,'day'); + if ($adh->statut > 0) print " ".img_warning($langs->trans("Late")); // Affiche picto retard uniquement si non brouillon et non resilie + } + else + { + print dol_print_date($adh->datefin,'day'); + } + } + else + { + print $langs->trans("SubscriptionNotReceived"); + if ($adh->statut > 0) print " ".img_warning($langs->trans("Late")); // Affiche picto retard uniquement si non brouillon et non resilie + } + print ''; print "\n"; print ''; @@ -302,49 +334,22 @@ if ($rowid) * Barre d'actions */ - print '
'; - // Lien nouvelle cotisation si non brouillon et non resilie if ($user->rights->adherent->cotisation->creer) { if ($action != 'addsubscription') { - if ($adh->statut > 0) print "".$langs->trans("AddSubscription").""; + print '
'; + + if ($adh->statut > 0) print "".$langs->trans("AddSubscription").""; else print ''.$langs->trans("AddSubscription").''; print "
\n"; + + print '
'; + print '
'; } } - print '
'; - - - - // Date fin cotisation - print "\n"; - print ''; - print ''; - print ''; - print '
'.$langs->trans("SubscriptionEndDate"); - print ''; - if ($adh->datefin) - { - if ($adh->datefin < time()) - { - print dol_print_date($adh->datefin,'day'); - if ($adh->statut > 0) print " ".img_warning($langs->trans("Late")); // Affiche picto retard uniquement si non brouillon et non resilie - } - else - { - print dol_print_date($adh->datefin,'day'); - } - } - else - { - print $langs->trans("SubscriptionNotReceived"); - if ($adh->statut > 0) print " ".img_warning($langs->trans("Late")); // Affiche picto retard uniquement si non brouillon et non resilie - } - print '
'; - print '
'; /* diff --git a/htdocs/adherents/class/adherent.class.php b/htdocs/adherents/class/adherent.class.php index 6f71db226e9..0fa93b6fe1e 100644 --- a/htdocs/adherents/class/adherent.class.php +++ b/htdocs/adherents/class/adherent.class.php @@ -1188,7 +1188,7 @@ class Adherent extends CommonObject $result=$adh->add_to_mailman($conf->global->ADHERENT_MAILMAN_LISTS_COTISANT); } - // Insertion dans la gestion bancaire si configure pour + // Insert into bank account directlty (if option choosed for) if ($option == 'bankdirect' && $accountid) { $acct=new Account($this->db); diff --git a/htdocs/lib/functions.lib.php b/htdocs/lib/functions.lib.php index 20b11c3cada..5022278c74e 100644 --- a/htdocs/lib/functions.lib.php +++ b/htdocs/lib/functions.lib.php @@ -2411,17 +2411,17 @@ function price($amount, $html=0, $outlangs='', $trunc=1, $rounding=-1) } /** - * \brief Function that return a number with universal decimal format (decimal separator is '.') from - * an amount typed by a user. - * \remarks Function to use on each input amount before any numeric test or database insert. - * \param amount Amount to convert/clean - * \param rounding ''=No rounding + * Function that return a number with universal decimal format (decimal separator is '.') from + * an amount typed by a user. + * Function to use on each input amount before any numeric test or database insert. + * @param amount Amount to convert/clean + * @param rounding ''=No rounding * 'MU'=Round to Max unit price (MAIN_MAX_DECIMALS_UNIT) * 'MT'=Round to Max for totals with Tax (MAIN_MAX_DECIMALS_TOT) * 'MS'=Round to Max Shown (MAIN_MAX_DECIMALS_SHOWN) - * \param alreadysqlnb Put 1 if you know that content is already universal format number - * \return string Amount with universal numeric format (Example: '99.99999') - * \seealso price Opposite function of price2num + * @param alreadysqlnb Put 1 if you know that content is already universal format number + * @return string Amount with universal numeric format (Example: '99.99999') + * @see price Opposite function of price2num */ function price2num($amount,$rounding='',$alreadysqlnb=0) { @@ -2497,10 +2497,11 @@ function price2num($amount,$rounding='',$alreadysqlnb=0) } /** - * \brief Return localtaxe rate for a particular tva - * \param tva Vat taxe - * \param local Local taxe to search and return - * \return int 0 if not found, localtax if found + * Return localtaxe rate for a particular tva + * @param tva Vat taxe + * @param local Local taxe to search and return + * @param societe_acheteuse Object of buying third party + * @return int 0 if not found, localtax if found */ function get_localtax($tva, $local, $societe_acheteuse="") { @@ -2534,7 +2535,11 @@ function get_localtax($tva, $local, $societe_acheteuse="") } /** - * Return vat rate of a product in a particular selling country. + * Return vat rate of a product in a particular selling country or default country + * vat if product is unknown. + * @param idprod Id of product or 0 if not a predefined product + * @param countrycode Country code (FR, US, IT, ...) + * @return int <0 if KO, Vat rate if OK * TODO May be this should be better as a method of product class */ function get_product_vat_for_country($idprod, $countrycode) @@ -2542,20 +2547,29 @@ function get_product_vat_for_country($idprod, $countrycode) global $db,$mysoc; $ret=0; + $found=0; - // Load product - $product=new Product($db); - $product->fetch($idprod); + if ($idprod > 0) + { + // Load product + $product=new Product($db); + $result=$product->fetch($idprod); - if ($mysoc->pays_code == $countrycode) // If selling country is ours + if ($mysoc->pays_code == $countrycode) // If selling country is ours + { + $ret=$product->tva_tx; // Default vat of product we defined + $found=1; + } + else + { + // TODO Read default product vat according to countrycode and product + + + } + } + + if (! $found) { - $ret=$product->tva_tx; // Default vat of product we defined - } - else - { - // TODO Read default product vat according to countrycode - - // If vat of product for the country not found or not defined, we return higher vat of country. $sql.="SELECT taux as vat_rate"; $sql.=" FROM ".MAIN_DB_PREFIX."c_tva as t, ".MAIN_DB_PREFIX."c_pays as p"; @@ -2575,12 +2589,16 @@ function get_product_vat_for_country($idprod, $countrycode) else dol_print_error($db); } - //print "ret=".$ret;exit; + dol_syslog("get_product_vat_for_country: ret=".$ret); return $ret; } /** * Return localtax rate of a product in a particular selling country + * @param idprod Id of product + * @package local 1 for localtax1, 2 for localtax 2 + * @param countrycode Country code (FR, US, IT, ...) + * @return int <0 if KO, Vat rate if OK * TODO May be this should be better as a method of product class */ function get_product_localtax_for_country($idprod, $local, $countrycode) @@ -2597,17 +2615,17 @@ function get_product_localtax_for_country($idprod, $local, $countrycode) } /** - * \brief Function that return vat rate of a product line (according to seller, buyer and product vat rate) - * \remarks Si vendeur non assujeti a TVA, TVA par defaut=0. Fin de regle. - * Si le (pays vendeur = pays acheteur) alors TVA par defaut=TVA du produit vendu. Fin de regle. - * Si (vendeur et acheteur dans Communaute europeenne) et (bien vendu = moyen de transports neuf comme auto, bateau, avion) alors TVA par defaut=0 (La TVA doit etre paye par acheteur au centre d'impots de son pays et non au vendeur). Fin de regle. - * Si (vendeur et acheteur dans Communaute europeenne) et (acheteur = particulier ou entreprise sans num TVA intra) alors TVA par defaut=TVA du produit vendu. Fin de regle - * Si (vendeur et acheteur dans Communaute europeenne) et (acheteur = entreprise avec num TVA) intra alors TVA par defaut=0. Fin de regle - * Sinon TVA proposee par defaut=0. Fin de regle. - * \param societe_vendeuse Objet societe vendeuse - * \param societe_acheteuse Objet societe acheteuse - * \param idprod Id product - * \return float Taux de tva a appliquer, -1 si ne peut etre determine + * Function that return vat rate of a product line (according to seller, buyer and product vat rate) + * Si vendeur non assujeti a TVA, TVA par defaut=0. Fin de regle. + * Si le (pays vendeur = pays acheteur) alors TVA par defaut=TVA du produit vendu. Fin de regle. + * Si (vendeur et acheteur dans Communaute europeenne) et (bien vendu = moyen de transports neuf comme auto, bateau, avion) alors TVA par defaut=0 (La TVA doit etre paye par acheteur au centre d'impots de son pays et non au vendeur). Fin de regle. + * Si (vendeur et acheteur dans Communaute europeenne) et (acheteur = particulier ou entreprise sans num TVA intra) alors TVA par defaut=TVA du produit vendu. Fin de regle + * Si (vendeur et acheteur dans Communaute europeenne) et (acheteur = entreprise avec num TVA) intra alors TVA par defaut=0. Fin de regle + * Sinon TVA proposee par defaut=0. Fin de regle. + * @param societe_vendeuse Objet societe vendeuse + * @param societe_acheteuse Objet societe acheteuse + * @param idprod Id product + * @return float Taux de tva a appliquer, -1 si ne peut etre determine */ function get_default_tva($societe_vendeuse, $societe_acheteuse, $idprod=0) { @@ -2616,7 +2634,7 @@ function get_default_tva($societe_vendeuse, $societe_acheteuse, $idprod=0) if (!is_object($societe_vendeuse)) return -1; if (!is_object($societe_acheteuse)) return -1; - dol_syslog("get_default_tva seller use vat=".$societe_vendeuse->tva_assuj." seller country=".$societe_vendeuse->pays_code.", seller in cee=".$societe_vendeuse->isInEEC().", buyer country=".$societe_acheteuse->pays_code.", buyer in cee=".$societe_acheteuse->isInEEC().", idprod=".$idprod); + dol_syslog("get_default_tva: seller use vat=".$societe_vendeuse->tva_assuj.", seller country=".$societe_vendeuse->pays_code.", seller in cee=".$societe_vendeuse->isInEEC().", buyer country=".$societe_acheteuse->pays_code.", buyer in cee=".$societe_acheteuse->isInEEC().", idprod=".$idprod); // Si vendeur non assujeti a TVA (tva_assuj vaut 0/1 ou franchise/reel) if (is_numeric($societe_vendeuse->tva_assuj) && ! $societe_vendeuse->tva_assuj) return 0; @@ -2627,8 +2645,7 @@ function get_default_tva($societe_vendeuse, $societe_acheteuse, $idprod=0) // Le test ci-dessus ne devrait pas etre necessaire. Me signaler l'exemple du cas juridique concerne si le test suivant n'est pas suffisant. if ($societe_vendeuse->pays_code == $societe_acheteuse->pays_code) // Warning ->pays_id not always defined { - if ($idprod) return get_product_vat_for_country($idprod,$societe_vendeuse->pays_code); - return -1; // Si produit absent, on ne peut determiner taux tva + return get_product_vat_for_country($idprod,$societe_vendeuse->pays_code); } // Si (vendeur et acheteur dans Communaute europeenne) et (bien vendu = moyen de transports neuf comme auto, bateau, avion) alors TVA par defaut=0 (La TVA doit etre paye par l'acheteur au centre d'impots de son pays et non au vendeur). Fin de regle. @@ -2645,8 +2662,7 @@ function get_default_tva($societe_vendeuse, $societe_acheteuse, $idprod=0) } else { - if ($idprod) return get_product_vat_for_country($idprod,$societe_vendeuse->pays_code); - return -1; // Si produit absent, on ne peut determiner taux tva + return get_product_vat_for_country($idprod,$societe_vendeuse->pays_code); } }