|
@@ -51,6 +51,10 @@ class BuyCoursesPlugin extends Plugin
|
|
|
const SERVICE_TYPE_LP_FINAL_ITEM = 4;
|
|
|
const CULQI_INTEGRATION_TYPE = 'INTEG';
|
|
|
const CULQI_PRODUCTION_TYPE = 'PRODUC';
|
|
|
+ const TAX_APPLIES_TO_ALL = 1;
|
|
|
+ const TAX_APPLIES_TO_ONLY_COURSE = 2;
|
|
|
+ const TAX_APPLIES_TO_ONLY_SESSION = 3;
|
|
|
+ const TAX_APPLIES_TO_ONLY_SERVICES = 4;
|
|
|
|
|
|
public $isAdminPlugin = true;
|
|
|
|
|
@@ -81,6 +85,8 @@ class BuyCoursesPlugin extends Plugin
|
|
|
'commissions_enable' => 'boolean',
|
|
|
'unregistered_users_enable' => 'boolean',
|
|
|
'hide_free_text' => 'boolean',
|
|
|
+ 'invoicing_enable' => 'boolean',
|
|
|
+ 'tax_enable' => 'boolean',
|
|
|
]
|
|
|
);
|
|
|
}
|
|
@@ -163,6 +169,81 @@ class BuyCoursesPlugin extends Plugin
|
|
|
}
|
|
|
$this->manageTab(false);
|
|
|
}
|
|
|
+
|
|
|
+ public function update()
|
|
|
+ {
|
|
|
+ $table = self::TABLE_GLOBAL_CONFIG;
|
|
|
+ $sql = "SHOW COLUMNS FROM $table WHERE Field = 'global_tax_perc'";
|
|
|
+ $res = Database::query($sql);
|
|
|
+
|
|
|
+ if (Database::num_rows($res) === 0) {
|
|
|
+ $sql = "ALTER TABLE $table ADD (
|
|
|
+ global_tax_perc int(11) unsigned NOT NULL,
|
|
|
+ tax_applies_to int(11) unsigned NOT NULL,
|
|
|
+ tax_name varchar(255) NOT NULL
|
|
|
+ )";
|
|
|
+ $res = Database::query($sql);
|
|
|
+ if (!$res) {
|
|
|
+ echo Display::return_message($this->get_lang('ErrorUpdateFieldDB'), 'warning');
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ $table = self::TABLE_ITEM;
|
|
|
+ $sql = "SHOW COLUMNS FROM $table WHERE Field = 'tax_perc'";
|
|
|
+ $res = Database::query($sql);
|
|
|
+
|
|
|
+ if (Database::num_rows($res) === 0) {
|
|
|
+ $sql = "ALTER TABLE $table ADD tax_perc int(11) unsigned NULL";
|
|
|
+ $res = Database::query($sql);
|
|
|
+ if (!$res) {
|
|
|
+ echo Display::return_message($this->get_lang('ErrorUpdateFieldDB'), 'warning');
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ $table = self::TABLE_SERVICES;
|
|
|
+ $sql = "SHOW COLUMNS FROM $table WHERE Field = 'tax_perc'";
|
|
|
+ $res = Database::query($sql);
|
|
|
+
|
|
|
+ if (Database::num_rows($res) === 0) {
|
|
|
+ $sql = "ALTER TABLE $table ADD tax_perc int(11) unsigned NULL";
|
|
|
+ $res = Database::query($sql);
|
|
|
+ if (!$res) {
|
|
|
+ echo Display::return_message($this->get_lang('ErrorUpdateFieldDB'), 'warning');
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ $table = self::TABLE_SALE;
|
|
|
+ $sql = "SHOW COLUMNS FROM $table WHERE Field = 'tax_perc'";
|
|
|
+ $res = Database::query($sql);
|
|
|
+
|
|
|
+ if (Database::num_rows($res) === 0) {
|
|
|
+ $sql = "ALTER TABLE $table ADD (
|
|
|
+ price_without_tax decimal(10,2) NULL,
|
|
|
+ tax_perc int(11) unsigned NULL,
|
|
|
+ tax_amount decimal(10,2) NULL
|
|
|
+ )";
|
|
|
+ $res = Database::query($sql);
|
|
|
+ if (!$res) {
|
|
|
+ echo Display::return_message($this->get_lang('ErrorUpdateFieldDB'), 'warning');
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ $table = self::TABLE_SERVICES_SALE;
|
|
|
+ $sql = "SHOW COLUMNS FROM $table WHERE Field = 'tax_perc'";
|
|
|
+ $res = Database::query($sql);
|
|
|
+
|
|
|
+ if (Database::num_rows($res) === 0) {
|
|
|
+ $sql = "ALTER TABLE $table ADD (
|
|
|
+ price_without_tax decimal(10,2) NULL,
|
|
|
+ tax_perc int(11) unsigned NULL,
|
|
|
+ tax_amount decimal(10,2) NULL
|
|
|
+ )";
|
|
|
+ $res = Database::query($sql);
|
|
|
+ if (!$res) {
|
|
|
+ echo Display::return_message($this->get_lang('ErrorUpdateFieldDB'), 'warning');
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
/**
|
|
|
* This function verify if the plugin is enable and return the price info for a course or session in the new grid
|
|
@@ -525,12 +606,29 @@ class BuyCoursesPlugin extends Plugin
|
|
|
continue;
|
|
|
}
|
|
|
|
|
|
+ $price = $item['price'];
|
|
|
+ $taxPerc = null;
|
|
|
+ $priceWithoutTax = $item['price'];
|
|
|
+
|
|
|
+ $taxEnable = $this->get('tax_enable') === 'true';
|
|
|
+ $globalParameters = $this->getGlobalParameters();
|
|
|
+ $taxAppliesTo = $globalParameters['tax_applies_to'];
|
|
|
+ if ($taxEnable &&
|
|
|
+ ($taxAppliesTo == self::TAX_APPLIES_TO_ALL || $taxAppliesTo == self::TAX_APPLIES_TO_ONLY_COURSE)
|
|
|
+ ) {
|
|
|
+ $globalTaxPerc = $globalParameters['global_tax_perc'];
|
|
|
+ $precision = 2;
|
|
|
+ $taxPerc = is_null($item['tax_perc']) ? $globalTaxPerc : $item['tax_perc'];
|
|
|
+ $taxAmount = round($priceWithoutTax * $taxPerc / 100, $precision);
|
|
|
+ $price = $priceWithoutTax + $taxAmount;
|
|
|
+ }
|
|
|
+
|
|
|
$courseItem = [
|
|
|
'id' => $course->getId(),
|
|
|
'title' => $course->getTitle(),
|
|
|
'code' => $course->getCode(),
|
|
|
'course_img' => null,
|
|
|
- 'price' => $item['price'],
|
|
|
+ 'price' => $price,
|
|
|
'currency' => $item['iso_code'],
|
|
|
'teachers' => [],
|
|
|
'enrolled' => $this->getUserStatusForCourse(api_get_user_id(), $course),
|
|
@@ -592,6 +690,24 @@ class BuyCoursesPlugin extends Plugin
|
|
|
]
|
|
|
);
|
|
|
|
|
|
+ $price = $item['price'];
|
|
|
+ $taxPerc = null;
|
|
|
+ $priceWithoutTax = $item['price'];
|
|
|
+ $precision = 2;
|
|
|
+
|
|
|
+ $taxEnable = $this->get('tax_enable') === 'true';
|
|
|
+ $globalParameters = $this->getGlobalParameters();
|
|
|
+ $taxAppliesTo = $globalParameters['tax_applies_to'];
|
|
|
+ if ($taxEnable &&
|
|
|
+ ($taxAppliesTo == self::TAX_APPLIES_TO_ALL || $taxAppliesTo == self::TAX_APPLIES_TO_ONLY_COURSE)
|
|
|
+ ) {
|
|
|
+ $globalTaxPerc = $globalParameters['global_tax_perc'];
|
|
|
+ $precision = 2;
|
|
|
+ $taxPerc = is_null($item['tax_perc']) ? $globalTaxPerc : $item['tax_perc'];
|
|
|
+ $taxAmount = round($priceWithoutTax * $taxPerc / 100, $precision);
|
|
|
+ $price = $priceWithoutTax + $taxAmount;
|
|
|
+ }
|
|
|
+
|
|
|
$courseInfo = [
|
|
|
'id' => $course->getId(),
|
|
|
'title' => $course->getTitle(),
|
|
@@ -599,7 +715,13 @@ class BuyCoursesPlugin extends Plugin
|
|
|
'code' => $course->getCode(),
|
|
|
'visual_code' => $course->getVisualCode(),
|
|
|
'teachers' => [],
|
|
|
- 'price' => $item['price'],
|
|
|
+ 'price' => number_format($price, $precision),
|
|
|
+ 'price_without_tax' => number_format($priceWithoutTax, $precision),
|
|
|
+ 'tax_amount' => number_format($taxAmount, $precision),
|
|
|
+ 'tax_perc' => $taxPerc,
|
|
|
+ 'tax_name' => $globalParameters['tax_name'],
|
|
|
+ 'tax_enable' => $taxEnable &&
|
|
|
+ ($taxAppliesTo == self::TAX_APPLIES_TO_ALL || $taxAppliesTo == self::TAX_APPLIES_TO_ONLY_COURSE),
|
|
|
'currency' => $item['iso_code'],
|
|
|
'course_img' => null,
|
|
|
];
|
|
@@ -658,13 +780,36 @@ class BuyCoursesPlugin extends Plugin
|
|
|
'coach_access_end_date' => $session->getCoachAccessEndDate(),
|
|
|
]);
|
|
|
|
|
|
+ $price = $item['price'];
|
|
|
+ $taxPerc = null;
|
|
|
+ $priceWithoutTax = $item['price'];
|
|
|
+ $precision = 2;
|
|
|
+
|
|
|
+ $taxEnable = $this->get('tax_enable') === 'true';
|
|
|
+ $globalParameters = $this->getGlobalParameters();
|
|
|
+ $taxAppliesTo = $globalParameters['tax_applies_to'];
|
|
|
+ if ($taxEnable &&
|
|
|
+ ($taxAppliesTo == self::TAX_APPLIES_TO_ALL || $taxAppliesTo == self::TAX_APPLIES_TO_ONLY_SESSION)
|
|
|
+ ) {
|
|
|
+ $globalTaxPerc = $globalParameters['global_tax_perc'];
|
|
|
+ $taxPerc = is_null($item['tax_perc']) ? $globalTaxPerc : $item['tax_perc'];
|
|
|
+ $taxAmount = round($priceWithoutTax * $taxPerc / 100, $precision);
|
|
|
+ $price = $priceWithoutTax + $taxAmount;
|
|
|
+ }
|
|
|
+
|
|
|
$sessionInfo = [
|
|
|
'id' => $session->getId(),
|
|
|
'name' => $session->getName(),
|
|
|
'description' => $session->getDescription(),
|
|
|
'dates' => $sessionDates,
|
|
|
'courses' => [],
|
|
|
- 'price' => $item['price'],
|
|
|
+ 'price' => number_format($price, $precision),
|
|
|
+ 'price_without_tax' => number_format($priceWithoutTax, $precision),
|
|
|
+ 'tax_amount' => number_format($taxAmount, $precision),
|
|
|
+ 'tax_perc' => $taxPerc,
|
|
|
+ 'tax_name' => $globalParameters['tax_name'],
|
|
|
+ 'tax_enable' => $taxEnable &&
|
|
|
+ ($taxAppliesTo == self::TAX_APPLIES_TO_ALL || $taxAppliesTo == self::TAX_APPLIES_TO_ONLY_SESSION),
|
|
|
'currency' => $item['iso_code'],
|
|
|
'image' => null,
|
|
|
'nbrCourses' => $session->getNbrCourses(),
|
|
@@ -771,6 +916,26 @@ class BuyCoursesPlugin extends Plugin
|
|
|
$productName = $session->getName();
|
|
|
}
|
|
|
|
|
|
+ $price = $item['price'];
|
|
|
+ $priceWithoutTax = null;
|
|
|
+ $taxPerc = null;
|
|
|
+
|
|
|
+ $taxEnable = $this->get('tax_enable') === 'true';
|
|
|
+ $globalParameters = $this->getGlobalParameters();
|
|
|
+ $taxAppliesTo = $globalParameters['tax_applies_to'];
|
|
|
+ if ($taxEnable &&
|
|
|
+ ($taxAppliesTo == self::TAX_APPLIES_TO_ALL ||
|
|
|
+ ($taxAppliesTo == TAX_APPLIES_TO_ONLY_COURSE && $item['product_type'] == self::PRODUCT_TYPE_COURSE) ||
|
|
|
+ ($taxAppliesTo == TAX_APPLIES_TO_ONLY_SESSION && $item['product_type'] == self::PRODUCT_TYPE_SESSION))
|
|
|
+ ) {
|
|
|
+ $priceWithoutTax = $item['price'];
|
|
|
+ $globalTaxPerc = $globalParameters['global_tax_perc'];
|
|
|
+ $precision = 2;
|
|
|
+ $taxPerc = is_null($item['tax_perc']) ? $globalTaxPerc : $item['tax_perc'];
|
|
|
+ $taxAmount = round($priceWithoutTax * $taxPerc / 100, $precision);
|
|
|
+ $price = $priceWithoutTax + $taxAmount;
|
|
|
+ }
|
|
|
+
|
|
|
$values = [
|
|
|
'reference' => $this->generateReference(
|
|
|
api_get_user_id(),
|
|
@@ -783,7 +948,10 @@ class BuyCoursesPlugin extends Plugin
|
|
|
'product_type' => $item['product_type'],
|
|
|
'product_name' => $productName,
|
|
|
'product_id' => $item['product_id'],
|
|
|
- 'price' => $item['price'],
|
|
|
+ 'price' => $price,
|
|
|
+ 'price_without_tax' => $priceWithoutTax,
|
|
|
+ 'tax_perc' => $taxPerc,
|
|
|
+ 'tax_amount' => $taxAmount,
|
|
|
'status' => self::SALE_STATUS_PENDING,
|
|
|
'payment_type' => intval($paymentType),
|
|
|
];
|
|
@@ -926,6 +1094,21 @@ class BuyCoursesPlugin extends Plugin
|
|
|
];
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * Get Tax's types
|
|
|
+ *
|
|
|
+ * @return array
|
|
|
+ */
|
|
|
+ public function getTaxAppliesTo()
|
|
|
+ {
|
|
|
+ return [
|
|
|
+ self::TAX_APPLIES_TO_ALL => $this->get_lang('AllCoursesSessionsAndServices'),
|
|
|
+ self::TAX_APPLIES_TO_ONLY_COURSE => $this->get_lang('OnlyCourses'),
|
|
|
+ self::TAX_APPLIES_TO_ONLY_SESSION => $this->get_lang('OnlySessions'),
|
|
|
+ self::TAX_APPLIES_TO_ONLY_SERVICES=> $this->get_lang('OnlyServices'),
|
|
|
+ ];
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* Get a list of sales by the status.
|
|
|
*
|
|
@@ -1155,6 +1338,7 @@ class BuyCoursesPlugin extends Plugin
|
|
|
'visible' => false,
|
|
|
'currency' => empty($defaultCurrency) ? null : $defaultCurrency['iso_code'],
|
|
|
'price' => 0.00,
|
|
|
+ 'tax_perc' => null,
|
|
|
];
|
|
|
|
|
|
$item = $this->getItemByProduct($course->getId(), self::PRODUCT_TYPE_COURSE);
|
|
@@ -1164,6 +1348,7 @@ class BuyCoursesPlugin extends Plugin
|
|
|
$courseItem['visible'] = true;
|
|
|
$courseItem['currency'] = $item['iso_code'];
|
|
|
$courseItem['price'] = $item['price'];
|
|
|
+ $courseItem['tax_perc'] = $item['tax_perc'];
|
|
|
}
|
|
|
|
|
|
return $courseItem;
|
|
@@ -1197,6 +1382,7 @@ class BuyCoursesPlugin extends Plugin
|
|
|
'visible' => false,
|
|
|
'currency' => empty($defaultCurrency) ? null : $defaultCurrency['iso_code'],
|
|
|
'price' => 0.00,
|
|
|
+ 'tax_perc' => null,
|
|
|
];
|
|
|
|
|
|
$displayStartDate = $session->getDisplayStartDate();
|
|
@@ -1233,6 +1419,7 @@ class BuyCoursesPlugin extends Plugin
|
|
|
$sessionItem['visible'] = true;
|
|
|
$sessionItem['currency'] = $item['iso_code'];
|
|
|
$sessionItem['price'] = $item['price'];
|
|
|
+ $sessionItem['tax_perc'] = $item['tax_perc'];
|
|
|
}
|
|
|
|
|
|
return $sessionItem;
|
|
@@ -1604,6 +1791,7 @@ class BuyCoursesPlugin extends Plugin
|
|
|
'name' => Security::remove_XSS($service['name']),
|
|
|
'description' => Security::remove_XSS($service['description']),
|
|
|
'price' => $service['price'],
|
|
|
+ 'tax_perc' => $service['tax_perc'] != '' ? (int) $service['tax_perc'] : null,
|
|
|
'duration_days' => intval($service['duration_days']),
|
|
|
'applies_to' => intval($service['applies_to']),
|
|
|
'owner_id' => intval($service['owner_id']),
|
|
@@ -1658,15 +1846,16 @@ class BuyCoursesPlugin extends Plugin
|
|
|
'name' => Security::remove_XSS($service['name']),
|
|
|
'description' => Security::remove_XSS($service['description']),
|
|
|
'price' => $service['price'],
|
|
|
- 'duration_days' => intval($service['duration_days']),
|
|
|
- 'applies_to' => intval($service['applies_to']),
|
|
|
- 'owner_id' => intval($service['owner_id']),
|
|
|
- 'visibility' => intval($service['visibility']),
|
|
|
+ 'tax_perc' => $service['tax_perc'] != '' ? (int) $service['tax_perc'] : null,
|
|
|
+ 'duration_days' => (int) $service['duration_days'],
|
|
|
+ 'applies_to' => (int) $service['applies_to'],
|
|
|
+ 'owner_id' => (int) $service['owner_id'],
|
|
|
+ 'visibility' => (int) $service['visibility'],
|
|
|
'image' => 'simg-'.$id.'.png',
|
|
|
'video_url' => $service['video_url'],
|
|
|
'service_information' => $service['service_information'],
|
|
|
],
|
|
|
- ['id = ?' => intval($id)]
|
|
|
+ ['id = ?' => (int) $id]
|
|
|
);
|
|
|
}
|
|
|
|
|
@@ -1723,10 +1912,36 @@ class BuyCoursesPlugin extends Plugin
|
|
|
$services = [];
|
|
|
|
|
|
if ($id) {
|
|
|
+ $price = $return['price'];
|
|
|
+ $taxPerc = null;
|
|
|
+ $priceWithoutTax = $priceWithTax = $return['price'];
|
|
|
+ $precision = 2;
|
|
|
+
|
|
|
+ $taxEnable = $this->get('tax_enable') === 'true';
|
|
|
+ $globalParameters = $this->getGlobalParameters();
|
|
|
+ $taxAppliesTo = $globalParameters['tax_applies_to'];
|
|
|
+ if ($taxEnable &&
|
|
|
+ ($taxAppliesTo == self::TAX_APPLIES_TO_ALL || $taxAppliesTo == self::TAX_APPLIES_TO_ONLY_SERVICES)
|
|
|
+ ) {
|
|
|
+ $globalTaxPerc = $globalParameters['global_tax_perc'];
|
|
|
+ $precision = 2;
|
|
|
+ $taxPerc = is_null($return['tax_perc']) ? $globalTaxPerc : $return['tax_perc'];
|
|
|
+ $taxAmount = round($priceWithoutTax * $taxPerc / 100, $precision);
|
|
|
+ $priceWithTax = $priceWithoutTax + $taxAmount;
|
|
|
+ }
|
|
|
+
|
|
|
$services['id'] = $return['id'];
|
|
|
$services['name'] = $return['name'];
|
|
|
$services['description'] = $return['description'];
|
|
|
- $services['price'] = $return['price'];
|
|
|
+ $services['price'] = $price;
|
|
|
+ $services['tax_perc'] = $return['tax_perc'];
|
|
|
+ $services['price_with_tax'] = number_format($priceWithTax, $precision);
|
|
|
+ $services['price_without_tax'] = number_format($priceWithoutTax, $precision);
|
|
|
+ $services['tax_amount'] = number_format($taxAmount, $precision);
|
|
|
+ $services['tax_perc_show'] = $taxPerc;
|
|
|
+ $services['tax_name'] = $globalParameters['tax_name'];
|
|
|
+ $services['tax_enable'] = $taxEnable &&
|
|
|
+ ($taxAppliesTo == self::TAX_APPLIES_TO_ALL || $taxAppliesTo == self::TAX_APPLIES_TO_ONLY_SERVICES);
|
|
|
$services['currency'] = $return['currency'];
|
|
|
$services['duration_days'] = $return['duration_days'];
|
|
|
$services['applies_to'] = $return['applies_to'];
|
|
@@ -1747,6 +1962,7 @@ class BuyCoursesPlugin extends Plugin
|
|
|
$services[$index]['name'] = $service['name'];
|
|
|
$services[$index]['description'] = $service['description'];
|
|
|
$services[$index]['price'] = $service['price'];
|
|
|
+ $services[$index]['tax_perc'] = $service['tax_perc'];
|
|
|
$services[$index]['currency'] = $service['currency'];
|
|
|
$services[$index]['duration_days'] = $service['duration_days'];
|
|
|
$services[$index]['applies_to'] = $service['applies_to'];
|
|
@@ -2022,10 +2238,27 @@ class BuyCoursesPlugin extends Plugin
|
|
|
$services = [];
|
|
|
|
|
|
foreach ($return as $index => $service) {
|
|
|
+ $price = $service['price'];
|
|
|
+ $taxPerc = null;
|
|
|
+ $priceWithoutTax = $service['price'];
|
|
|
+
|
|
|
+ $taxEnable = $this->get('tax_enable') === 'true';
|
|
|
+ $globalParameters = $this->getGlobalParameters();
|
|
|
+ $taxAppliesTo = $globalParameters['tax_applies_to'];
|
|
|
+ if ($taxEnable &&
|
|
|
+ ($taxAppliesTo == self::TAX_APPLIES_TO_ALL || $taxAppliesTo == self::TAX_APPLIES_TO_ONLY_SERVICES)
|
|
|
+ ) {
|
|
|
+ $globalTaxPerc = $globalParameters['global_tax_perc'];
|
|
|
+ $precision = 2;
|
|
|
+ $taxPerc = is_null($service['tax_perc']) ? $globalTaxPerc : $service['tax_perc'];
|
|
|
+ $taxAmount = round($priceWithoutTax * $taxPerc / 100, $precision);
|
|
|
+ $price = $priceWithoutTax + $taxAmount;
|
|
|
+ }
|
|
|
+
|
|
|
$services[$index]['id'] = $service['id'];
|
|
|
$services[$index]['name'] = $service['name'];
|
|
|
$services[$index]['description'] = $service['description'];
|
|
|
- $services[$index]['price'] = $service['price'];
|
|
|
+ $services[$index]['price'] = number_format($price, $precision);
|
|
|
$services[$index]['currency'] = $service['currency'];
|
|
|
$services[$index]['duration_days'] = $service['duration_days'];
|
|
|
$services[$index]['applies_to'] = $service['applies_to'];
|
|
@@ -2070,7 +2303,24 @@ class BuyCoursesPlugin extends Plugin
|
|
|
}
|
|
|
|
|
|
$currency = $this->getSelectedCurrency();
|
|
|
-
|
|
|
+ $price = $service['price'];
|
|
|
+ $priceWithoutTax = null;
|
|
|
+ $taxPerc = null;
|
|
|
+
|
|
|
+ $taxEnable = $this->get('tax_enable') === 'true';
|
|
|
+ $globalParameters = $this->getGlobalParameters();
|
|
|
+ $taxAppliesTo = $globalParameters['tax_applies_to'];
|
|
|
+ if ($taxEnable &&
|
|
|
+ ($taxAppliesTo == self::TAX_APPLIES_TO_ALL || $taxAppliesTo == TAX_APPLIES_TO_ONLY_SERVICES)
|
|
|
+ ) {
|
|
|
+ $priceWithoutTax = $service['price'];
|
|
|
+ $globalTaxPerc = $globalParameters['global_tax_perc'];
|
|
|
+ $precision = 2;
|
|
|
+ $taxPerc = is_null($service['tax_perc']) ? $globalTaxPerc : $service['tax_perc'];
|
|
|
+ $taxAmount = round($priceWithoutTax * $taxPerc / 100, $precision);
|
|
|
+ $price = $priceWithoutTax + $taxAmount;
|
|
|
+ }
|
|
|
+
|
|
|
$values = [
|
|
|
'service_id' => $serviceId,
|
|
|
'reference' => $this->generateReference(
|
|
@@ -2079,7 +2329,10 @@ class BuyCoursesPlugin extends Plugin
|
|
|
$infoSelect
|
|
|
),
|
|
|
'currency_id' => $currency['id'],
|
|
|
- 'price' => $service['price'],
|
|
|
+ 'price' => $price,
|
|
|
+ 'price_without_tax' => $priceWithoutTax,
|
|
|
+ 'tax_perc' => $taxPerc,
|
|
|
+ 'tax_amount' => $taxAmount,
|
|
|
'node_type' => $service['applies_to'],
|
|
|
'node_id' => intval($infoSelect),
|
|
|
'buyer_id' => $userId,
|
|
@@ -2145,11 +2398,19 @@ class BuyCoursesPlugin extends Plugin
|
|
|
*/
|
|
|
public function saveGlobalParameters($params)
|
|
|
{
|
|
|
+ $sqlParams = [
|
|
|
+ 'terms_and_conditions' => $params['terms_and_conditions'],
|
|
|
+ ];
|
|
|
+
|
|
|
+ if ($this->get('tax_enable') === 'true') {
|
|
|
+ $sqlParams['global_tax_perc'] = $params['global_tax_perc'];
|
|
|
+ $sqlParams['tax_applies_to'] = $params['tax_applies_to'];
|
|
|
+ $sqlParams['tax_name'] = $params['tax_name'];
|
|
|
+ }
|
|
|
+
|
|
|
return Database::update(
|
|
|
Database::get_main_table(self::TABLE_GLOBAL_CONFIG),
|
|
|
- [
|
|
|
- 'terms_and_conditions' => $params['terms_and_conditions'],
|
|
|
- ],
|
|
|
+ $sqlParams,
|
|
|
['id = ?' => 1]
|
|
|
);
|
|
|
}
|