JezK
Edit File: Flat.php
<?php namespace WeDevs\Dokan\Commission\Formula; use WeDevs\Dokan\Commission\Model\Setting; class Flat extends AbstractFormula { /** * Commission type source. * * @since 3.14.0 */ const SOURCE = 'flat'; /** * Amount of flat commission. * * @var int|float $flat_commission * * @since 3.14.0 */ protected $flat_commission = 0; /** * Per item admin commission amount. * * @since 3.14.0 * * @var int|float $per_item_admin_commission */ protected $per_item_admin_commission = 0; /** * Admin commission amount. * * @since 3.14.0 * * @var int|float $admin_commission */ protected $admin_commission = 0; /** * Total vendor earning amount. * * @since 3.14.0 * * @var int|float $vendor_earning */ protected $vendor_earning = 0; /** * Total items quantity, on it the commission will be calculated. * * @since 3.14.0 * * @var int $items_total_quantity */ protected $items_total_quantity = 1; /** * Class constructor. * * @since 3.14.0 * * @param \WeDevs\Dokan\Commission\Model\Setting $settings */ public function __construct( Setting $settings ) { $this->set_settings( $settings ); } /** * Calculating the flat commission. * * @since 3.14.0 * * @return void */ public function calculate() { $this->set_quantity( max( $this->get_quantity(), 1 ) ); if ( $this->is_applicable() ) { $this->per_item_admin_commission = $this->validate_rate( $this->get_settings()->get_flat() ); } if ( $this->per_item_admin_commission > $this->get_amount() ) { $this->per_item_admin_commission = $this->get_amount(); } $this->flat_commission = $this->per_item_admin_commission; if ( (int) $this->get_quantity() > 1 ) { $this->flat_commission = $this->per_item_admin_commission * apply_filters( 'dokan_commission_multiply_by_order_quantity', $this->get_quantity() ); } $this->admin_commission = $this->flat_commission; if ( $this->admin_commission > $this->get_amount() ) { $this->admin_commission = $this->get_amount(); } $this->vendor_earning = $this->get_amount() - $this->admin_commission; $this->items_total_quantity = $this->get_quantity(); } /** * Get commission date parameters. * * @since 3.14.0 * * @return array */ public function get_parameters(): array { return [ 'flat' => $this->get_settings()->get_flat(), 'meta_data' => $this->get_settings()->get_meta_data(), ]; } /** * Returns commission source. * * @since 3.14.0 * * @return string */ public function get_source(): string { return self::SOURCE; } /** * Returns if a flat commission is applicable or not. * * @since 3.14.0 * * @return bool */ public function is_applicable(): bool { return is_numeric( $this->get_settings()->get_flat() ); } /** * Returns admin commission amount. * * @since 3.14.0 * * @return float */ public function get_admin_commission(): float { return $this->admin_commission; } /** * Returns vendor earning amount. * * @since 3.14.0 * * @return float */ public function get_vendor_earning(): float { return $this->vendor_earning; } /** * Returns per item admin commission amount. * * @since 3.14.0 * * @return float */ public function get_per_item_admin_commission(): float { return $this->validate_rate( $this->per_item_admin_commission ); } /** * Returns the quantity on which the commission has been calculated. * * @since 3.14.0 * * @return int */ public function get_items_total_quantity(): int { return $this->items_total_quantity; } }