コード例 #1
0
ファイル: Abstract.php プロジェクト: virtual97/avatax
 /**
  * Adds additional transaction based data
  *
  * @param OnePica_AvaTax_Model_Sales_Quote_Address|Mage_Sales_Model_Order $object
  * @return $this
  */
 protected function _addGeneralInfo($object)
 {
     $storeId = $this->_getStoreIdByObject($object);
     $this->_setCompanyCode($storeId);
     $this->_request->setBusinessIdentificationNo($this->_getVatId($object));
     $this->_request->setDetailLevel(DetailLevel::$Document);
     $this->_request->setDocDate($this->_getDateModel()->date('Y-m-d'));
     $this->_request->setExemptionNo('');
     $this->_request->setDiscount(0.0);
     //cannot be used in Magento
     $this->_request->setSalespersonCode(Mage::helper('avatax')->getSalesPersonCode($storeId));
     $this->_request->setLocationCode(Mage::helper('avatax')->getLocationCode($storeId));
     $this->_request->setCountry(Mage::getStoreConfig('shipping/origin/country_id', $storeId));
     $this->_request->setCurrencyCode(Mage::app()->getStore($storeId)->getBaseCurrencyCode());
     $this->_addCustomer($object);
     if ($object instanceof Mage_Sales_Model_Order && $object->getIncrementId()) {
         $this->_request->setReferenceCode('Magento Order #' . $object->getIncrementId());
     }
     return $this;
 }
コード例 #2
0
ファイル: avalara.php プロジェクト: sam-akopyan/hamradio
 function createStandardRequest($calc, $products, $sign = 1)
 {
     if (!class_exists('TaxServiceSoap')) {
         require VMAVALARA_CLASS_PATH . DS . 'TaxServiceSoap.class.php';
     }
     if (!class_exists('DocumentType')) {
         require VMAVALARA_CLASS_PATH . DS . 'DocumentType.class.php';
     }
     if (!class_exists('DetailLevel')) {
         require VMAVALARA_CLASS_PATH . DS . 'DetailLevel.class.php';
     }
     if (!class_exists('Line')) {
         require VMAVALARA_CLASS_PATH . DS . 'Line.class.php';
     }
     if (!class_exists('ServiceMode')) {
         require VMAVALARA_CLASS_PATH . DS . 'ServiceMode.class.php';
     }
     if (!class_exists('Line')) {
         require VMAVALARA_CLASS_PATH . DS . 'Line.class.php';
     }
     if (!class_exists('GetTaxRequest')) {
         require VMAVALARA_CLASS_PATH . DS . 'GetTaxRequest.class.php';
     }
     if (!class_exists('GetTaxResult')) {
         require VMAVALARA_CLASS_PATH . DS . 'GetTaxResult.class.php';
     }
     if (!class_exists('Address')) {
         require VMAVALARA_CLASS_PATH . DS . 'Address.class.php';
     }
     if (is_object($calc)) {
         $calc = get_object_vars($calc);
     }
     $request = new GetTaxRequest();
     $origin = new Address();
     //In Virtuemart we have not differenct warehouses, but we have a shipment address
     //So when the vendor has a shipment address, we assume that it is his warehouse
     //Later we can combine products with shipment addresses for different warehouse (yehye, future music)
     //But for now we just use the BT address
     if (!class_exists('VirtueMartModelVendor')) {
         require JPATH_VM_ADMINISTRATOR . DS . 'models' . DS . 'vendor.php';
     }
     $userId = VirtueMartModelVendor::getUserIdByVendorId($calc['virtuemart_vendor_id']);
     $userModel = VmModel::getModel('user');
     $virtuemart_userinfo_id = $userModel->getBTuserinfo_id($userId);
     // this is needed to set the correct user id for the vendor when the user is logged
     $userModel->getVendor($calc['virtuemart_vendor_id']);
     $vendorFieldsArray = $userModel->getUserInfoInUserFields('mail', 'BT', $virtuemart_userinfo_id, FALSE, TRUE);
     $vendorFields = $vendorFieldsArray[$virtuemart_userinfo_id];
     $origin->setLine1($vendorFields['fields']['address_1']['value']);
     $origin->setLine2($vendorFields['fields']['address_2']['value']);
     $origin->setCity($vendorFields['fields']['city']['value']);
     $origin->setCountry($vendorFields['fields']['virtuemart_country_id']['country_2_code']);
     $origin->setRegion($vendorFields['fields']['virtuemart_state_id']['state_2_code']);
     $origin->setPostalCode($vendorFields['fields']['zip']['value']);
     $request->setOriginAddress($origin);
     //Address
     if (isset($this->addresses[0])) {
         $destination = $this->addresses[0];
     } else {
         return FALSE;
     }
     if (!class_exists('calculationHelper')) {
         require JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'calculationh.php';
     }
     $calculator = calculationHelper::getInstance();
     $request->setCurrencyCode($calculator->_currencyDisplay->_vendorCurrency_code_3);
     //CurrencyCode
     $request->setDestinationAddress($destination);
     //Address
     $request->setCompanyCode($calc['company_code']);
     // Your Company Code From the Dashboard
     $request->setDocDate(date('Y-m-d'));
     //date, checked
     $request->setCustomerCode(self::$vmadd['customer_number']);
     //string Required
     if (isset(self::$vmadd['tax_usage_type'])) {
         $request->setCustomerUsageType(self::$vmadd['tax_usage_type']);
         //string   Entity Usage
     }
     if (isset(self::$vmadd['tax_exemption_number'])) {
         $request->setExemptionNo(self::$vmadd['tax_exemption_number']);
         //string   if not using ECMS which keys on customer code
     }
     if (isset(self::$vmadd['taxOverride'])) {
         $request->setTaxOverride(self::$vmadd['taxOverride']);
         avadebug('I set tax override ', self::$vmadd['taxOverride']);
     }
     $setAllDiscounted = false;
     if (isset($products['discountAmount'])) {
         if (!empty($products['discountAmount'])) {
             //$request->setDiscount($sign * $products['discountAmount'] * (-1));            //decimal
             $request->setDiscount($sign * $products['discountAmount']);
             //decimal
             vmdebug('We sent as discount ' . $request->getDiscount());
             $setAllDiscounted = true;
         }
         unset($products['discountAmount']);
     }
     $request->setDetailLevel('Tax');
     //Summary or Document or Line or Tax or Diagnostic
     $lines = array();
     $n = 0;
     $this->_lineNumbersToCartProductId = array();
     foreach ($products as $k => $product) {
         $n++;
         $this->_lineNumbersToCartProductId[$n] = $k;
         $line = new Line();
         $line->setNo($n);
         //string  // line Number of invoice
         $line->setItemCode($product['product_sku']);
         //string
         $line->setDescription($product['product_name']);
         //product description, like in cart, atm only the name, todo add customfields
         if (!empty($product['categories'])) {
             //avadebug('AvaTax setTaxCode Product has categories !',$catNames);
             if (!class_exists('TableCategories')) {
                 require JPATH_VM_ADMINISTRATOR . DS . 'tables' . DS . 'categories.php';
             }
             $db = JFactory::getDbo();
             $catTable = new TableCategories($db);
             foreach ($product['categories'] as $cat) {
                 $catTable->load($cat);
                 $catslug = $catTable->slug;
                 if (strpos($catslug, 'avatax-') !== FALSE) {
                     $taxCode = substr($catslug, 7);
                     if (!empty($taxCode)) {
                         $line->setTaxCode($taxCode);
                     } else {
                         vmError('AvaTax setTaxCode, category could not be parsed ' . $catslug);
                     }
                     break;
                 }
             }
         }
         //$line->setTaxCode("");             //string
         $line->setQty($product['amount']);
         //decimal
         $line->setAmount($sign * $product['price'] * $product['amount']);
         //decimal // TotalAmmount
         if ($setAllDiscounted or !empty($product['discount'])) {
             $line->setDiscounted(1);
         } else {
             $line->setDiscounted(0);
         }
         $line->setRevAcct("");
         //string
         $line->setRef1("");
         //string
         $line->setRef2("");
         //string
         if (isset(self::$vmadd['tax_usage_type'])) {
             $line->setCustomerUsageType(self::$vmadd['tax_usage_type']);
             //string   Entity Usage
         }
         if (isset(self::$vmadd['tax_exemption_number'])) {
             $line->setExemptionNo(self::$vmadd['tax_exemption_number']);
             //string   if not using ECMS which keys on customer code
         }
         if (isset(self::$vmadd['taxOverride'])) {
             //create new TaxOverride Object set
             //$line->setTaxOverride(self::$vmadd['taxOverride']);
         }
         $lines[] = $line;
     }
     $this->newATConfig($calc);
     $request->setLines($lines);
     return $request;
 }
 function wc_autoship_taxnow_add_tax_rates($tax_rates, $schedule_id)
 {
     include_once WP_PLUGIN_DIR . '/taxnow_woo/taxnow-woo.class.php';
     include_once WP_PLUGIN_DIR . '/woocommerce-autoship/classes/wc-autoship-schedule.php';
     if (class_exists('class_taxNOW_woo') && class_exists('WC_Autoship_Schedule')) {
         // Create TaxNOW instance
         $taxnow_woo = new class_taxNOW_woo();
         // Get autoship schedule
         $schedule = new WC_Autoship_Schedule($schedule_id);
         // Get autoship customer
         $customer = $schedule->get_customer();
         // Create service
         $service = $taxnow_woo->create_service('TaxServiceSoap', false);
         $request = new GetTaxRequest();
         $request->setDocDate(date('Y-m-d', current_time('timestamp')));
         $request->setDocCode('');
         $request->setCustomerCode($customer->get_email());
         $request->setCompanyCode(get_option('tnwoo_company_code'));
         $request->setDocType(DocumentType::$SalesOrder);
         $request->setDetailLevel(DetailLevel::$Tax);
         $request->setCurrencyCode(get_option('woocommerce_currency'));
         $request->setBusinessIdentificationNo(get_option('tnwoo_business_vat_id'));
         // Origin address
         $origin = new Address();
         $origin->setLine1(get_option('tnwoo_origin_street'));
         $origin->setCity(get_option('tnwoo_origin_city'));
         $origin->setRegion(get_option('tnwoo_origin_state'));
         $origin->setPostalCode(get_option('tnwoo_origin_zip'));
         $origin->setCountry(get_option('tnwoo_origin_country'));
         $request->setOriginAddress($origin);
         // Destination address
         $destination = new Address();
         $destination->setLine1($customer->get('shipping_address_1'));
         $destination->setCity($customer->get('shipping_city'));
         $destination->setRegion($customer->get('shipping_state'));
         $destination->setPostalCode($customer->get('shipping_postcode'));
         $destination->setCountry($customer->get('shipping_country'));
         $request->setDestinationAddress($destination);
         // Lines items
         $items = $schedule->get_items();
         $lines = array();
         $global_tax_code = get_option('tnwoo_default_tax_code');
         foreach ($items as $i => $item) {
             // Get WooCommerce product ID
             $product_id = $item->get_product_id();
             // Create line item
             $line = new Line();
             $line->setItemCode($product_id);
             $line->setDescription($product_id);
             $tax_code = get_post_meta($product_id, '_taxnow_taxcode', true);
             $line->setTaxCode(!empty($tax_code) ? $tax_code : $global_tax_code);
             $line->setQty((int) $item->get_quantity());
             $line->setAmount((double) $item->get_autoship_price());
             $line->setNo($i + 1);
             $line->setDiscounted(0);
             $lines[] = $line;
         }
         $request->setLines($lines);
         // Pretax discount
         $discount_pretax = 0.0;
         // Send request
         $taxnow_woo->log_add_entry('calculate_tax', 'request', $request);
         try {
             $response = $service->getTax($request);
             $taxnow_woo->log_add_entry('calculate_tax', 'response', $response);
             if ($response->getResultCode() == SeverityLevel::$Success) {
                 foreach ($response->GetTaxLines() as $l => $TaxLine) {
                     foreach ($TaxLine->getTaxDetails() as $d => $TaxDetail) {
                         // Create WooCommerce tax rate
                         $tax_rate = array('rate' => 100.0 * $TaxDetail->getRate(), 'label' => $TaxDetail->getTaxName(), 'shipping' => 'no', 'compound' => 'no');
                         $tax_rates["wc_autoship_taxnow_{$l}_{$d}"] = $tax_rate;
                     }
                 }
             }
         } catch (Exception $e) {
             $taxnow_woo->log_add_entry('calculate_tax', 'exception', $e->getMessage());
         }
     }
     // Return tax rates
     return $tax_rates;
 }