Example #1
0
/**
 *	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)
{
    global $conf;
    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 . ", SERVICE_ARE_ECOMMERCE_200238EC=" . $conf->global->SERVICES_ARE_ECOMMERCE_200238EC);
    // 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) {
        //print 'VATRULE 1';
        return 0;
    }
    if (!is_numeric($societe_vendeuse->tva_assuj) && $societe_vendeuse->tva_assuj == 'franchise') {
        //print 'VATRULE 2';
        return 0;
    }
    //if (is_object($societe_acheteuse) && ($societe_vendeuse->pays_id == $societe_acheteuse->pays_id) && ($societe_acheteuse->tva_assuj == 1 || $societe_acheteuse->tva_assuj == 'reel'))
    // 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.
    // Si le (pays vendeur = pays acheteur) alors la TVA par defaut=TVA du produit vendu. Fin de regle.
    if ($societe_vendeuse->pays_code == $societe_acheteuse->pays_code) {
        //print 'VATRULE 3';
        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.
    // Non gere
    // Si (vendeur et acheteur dans Communaute europeenne) et (acheteur = entreprise) alors TVA par defaut=0. Fin de regle
    // Si (vendeur et acheteur dans Communaute europeenne) et (acheteur = particulier) alors TVA par defaut=TVA du produit vendu. Fin de regle
    if ($societe_vendeuse->isInEEC() && $societe_acheteuse->isInEEC()) {
        $isacompany = $societe_acheteuse->isACompany();
        if ($isacompany) {
            //print 'VATRULE 4';
            return 0;
        } else {
            //print 'VATRULE 5';
            return get_product_vat_for_country($idprod, $societe_vendeuse->pays_code);
        }
    }
    // If services are eServices according to EU Council Directive 2002/38/EC (ec.europa.eu/taxation_customs/taxation/v.../article_1610_en.htm)
    // we use the buyer VAT.
    if (!empty($conf->global->SERVICE_ARE_ECOMMERCE_200238EC)) {
        //print "eee".$societe_acheteuse->isACompany();exit;
        if (!$societe_vendeuse->isInEEC() && $societe_acheteuse->isInEEC() && !$societe_acheteuse->isACompany()) {
            //print 'VATRULE 6';
            return get_product_vat_for_country($idprod, $societe_acheteuse->pays_code);
        }
    }
    // Sinon la TVA proposee par defaut=0. Fin de regle.
    // Rem: Cela signifie qu'au moins un des 2 est hors Communaute europeenne et que le pays differe
    //print 'VATRULE 7';
    return 0;
}
Example #2
0
/**
 *	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		$thirdparty_seller    	Objet societe vendeuse
 *	@param  Societe		$thirdparty_buyer   	Objet societe acheteuse
 *	@param  int			$idprod					Id product
 *	@param	int			$idprodfournprice		Id product_fournisseur_price (for supplier order/invoice)
 *	@return float         				      	Taux de tva a appliquer, -1 si ne peut etre determine
 *  @see get_default_npr, get_default_localtax
 */
function get_default_tva($thirdparty_seller, $thirdparty_buyer, $idprod = 0, $idprodfournprice = 0)
{
    global $conf;
    if (!is_object($thirdparty_seller)) {
        return -1;
    }
    if (!is_object($thirdparty_buyer)) {
        return -1;
    }
    // Note: possible values for tva_assuj are 0/1 or franchise/reel
    $seller_use_vat = is_numeric($thirdparty_seller->tva_assuj) && !$thirdparty_seller->tva_assuj || !is_numeric($thirdparty_seller->tva_assuj) && $thirdparty_seller->tva_assuj == 'franchise' ? 0 : 1;
    $seller_country_code = $thirdparty_seller->country_code;
    $seller_in_cee = $thirdparty_seller->isInEEC();
    $buyer_country_code = $thirdparty_buyer->country_code;
    $buyer_in_cee = $thirdparty_buyer->isInEEC();
    dol_syslog("get_default_tva: seller use vat=" . $seller_use_vat . ", seller country=" . $seller_country_code . ", seller in cee=" . $seller_in_cee . ", buyer country=" . $buyer_country_code . ", buyer in cee=" . $buyer_in_cee . ", idprod=" . $idprod . ", idprodfournprice=" . $idprodfournprice . ", SERVICE_ARE_ECOMMERCE_200238EC=" . (!empty($conf->global->SERVICES_ARE_ECOMMERCE_200238EC) ? $conf->global->SERVICES_ARE_ECOMMERCE_200238EC : ''));
    // If services are eServices according to EU Council Directive 2002/38/EC (http://ec.europa.eu/taxation_customs/taxation/vat/traders/e-commerce/article_1610_en.htm)
    // we use the buyer VAT.
    if (!empty($conf->global->SERVICE_ARE_ECOMMERCE_200238EC)) {
        if ($seller_in_cee && $buyer_in_cee && !$thirdparty_buyer->isACompany()) {
            //print 'VATRULE 0';
            return get_product_vat_for_country($idprod, $thirdparty_buyer, $idprodfournprice);
        }
    }
    // If seller does not use VAT
    if (!$seller_use_vat) {
        //print 'VATRULE 1';
        return 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.
    // Si le (pays vendeur = pays acheteur) alors la TVA par defaut=TVA du produit vendu. Fin de regle.
    if ($seller_country_code == $buyer_country_code || in_array($seller_country_code, array('FR,MC')) && in_array($buyer_country_code, array('FR', 'MC'))) {
        //print 'VATRULE 2';
        return get_product_vat_for_country($idprod, $thirdparty_seller, $idprodfournprice);
    }
    // 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.
    // Not supported
    // Si (vendeur et acheteur dans Communaute europeenne) et (acheteur = entreprise) alors TVA par defaut=0. Fin de regle
    // Si (vendeur et acheteur dans Communaute europeenne) et (acheteur = particulier) alors TVA par defaut=TVA du produit vendu. Fin de regle
    if ($seller_in_cee && $buyer_in_cee) {
        $isacompany = $thirdparty_buyer->isACompany();
        if ($isacompany) {
            //print 'VATRULE 3';
            return 0;
        } else {
            //print 'VATRULE 4';
            return get_product_vat_for_country($idprod, $thirdparty_seller, $idprodfournprice);
        }
    }
    // Sinon la TVA proposee par defaut=0. Fin de regle.
    // Rem: Cela signifie qu'au moins un des 2 est hors Communaute europeenne et que le pays differe
    //print 'VATRULE 5';
    return 0;
}