mirror of
https://github.com/Dolibarr/dolibarr.git
synced 2025-12-05 17:18:13 +01:00
Work on invoice creation when creating subscriptions
This commit is contained in:
@@ -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 '<tr><td>'.$langs->trans("Status").'</td><td class="valeur">'.$adh->getLibStatut(4).'</td></tr>';
|
||||
|
||||
// Date end subscription
|
||||
// Date fin cotisation
|
||||
print '<tr><td>'.$langs->trans("SubscriptionEndDate").'</td><td class="valeur">';
|
||||
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 '</td></tr>';
|
||||
|
||||
print "</table>\n";
|
||||
print '</form>';
|
||||
@@ -302,49 +334,22 @@ if ($rowid)
|
||||
* Barre d'actions
|
||||
*/
|
||||
|
||||
print '<div class="tabsAction">';
|
||||
|
||||
// Lien nouvelle cotisation si non brouillon et non resilie
|
||||
if ($user->rights->adherent->cotisation->creer)
|
||||
{
|
||||
if ($action != 'addsubscription')
|
||||
{
|
||||
if ($adh->statut > 0) print "<a class=\"butAction\" href=\"card_subscriptions.php?rowid=$rowid&action=addsubscription\">".$langs->trans("AddSubscription")."</a>";
|
||||
print '<div class="tabsAction">';
|
||||
|
||||
if ($adh->statut > 0) print "<a class=\"butAction\" href=\"card_subscriptions.php?rowid=$rowid&action=addsubscription\">".$langs->trans("AddSubscription")."</a>";
|
||||
else print '<a class="butActionRefused" href="#" title="'.dol_escape_htmltag($langs->trans("ValidateBefore")).'">'.$langs->trans("AddSubscription").'</a>';
|
||||
|
||||
print "<br>\n";
|
||||
|
||||
print '</div>';
|
||||
print '<br>';
|
||||
}
|
||||
}
|
||||
print '</div>';
|
||||
|
||||
|
||||
|
||||
// Date fin cotisation
|
||||
print "<table class=\"border\" width=\"50%\">\n";
|
||||
print '<tr><td>'.$langs->trans("SubscriptionEndDate");
|
||||
print '</td>';
|
||||
print '<td>';
|
||||
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 '</td>';
|
||||
print '</tr>';
|
||||
print '</table>';
|
||||
print '<br>';
|
||||
|
||||
|
||||
/*
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user